首页 > 代码库 > 工厂方法模式
工厂方法模式
一、内容
不直接向客户端暴露对象创建的实现细节,定义一个用于创建对象的接口(工厂接口),让子类决定实例化哪一个产品类
二、角色
- 抽象工厂角色(Factory)
- 具体工厂角色(Concrete Factory)
- 抽象产品角色(Product)
- 具体产品角色(Concrete Product)
三、优点
- 隐藏了对象创建的实现细节
- 工厂类可以不知道它所创建的对象的类
- 每个具体的产品都对应了一个具体的工厂,不需要修改工厂类代码
四、缺点
- 每增加一个具体产品类,就必须增加一个相应的具体工厂类
五、适用场景
- 需要生产多种、大量复杂对象的时候
- 需要降低耦合度的时候
- 当系统中的产品种类需要经常扩展的时候
六、实例
#!/usr/bin/env python# -*- coding: utf8 -*-# __Author: "Skiler Hao"# date: 2017/6/2 15:45from abc import ABCMeta, abstractmethodclass Payment(metaclass=ABCMeta): @abstractmethod def pay(self, money): passclass AliPay(Payment): def __init__(self,enabled_yue=False): self.enabled_yue = enabled_yue def pay(self, money): if self.enabled_yue: print("支付宝余额支付%s元" % money) else: print("支付宝支付%s元" % money)class ApplePay(Payment): def pay(self, money): print("苹果支付支付%s元" % money)class WechatPay(Payment): def pay(self, money): print("微信支付支付%s元" % money)class PaymentFactory(metaclass=ABCMeta): @abstractmethod def create_payment(self): passclass AlipayFactory(PaymentFactory): def create_payment(self): return AliPay()class AppleFactory(PaymentFactory): def create_payment(self): return ApplePay()class WechatFactory(PaymentFactory): def create_payment(self): return WechatPay()f = AlipayFactory()p = f.create_payment()p.pay(100)
七、UML图
工厂方法模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。