一、内容
不直接向客户端暴露对象创建的实现细节,而是通过一个工厂类来创建产品类的实例
二、角色
- 工厂角色(Factory)
- 抽象产品角色(Product)
- 具体产品角色(Concrete Product)
三、优点
- 隐藏了对象创建的实现细节
- 客户端不需要修改代码
四、缺点
- 违反了单一职责的原则,将创建逻辑几种到一个工厂类里
- 当添加新产品时,需要修改工厂类代码,违反了开闭原则
五、实例
#!/usr/bin/env python # -*- coding: utf8 -*- # __Author: "Skiler Hao" # date: 2017/6/2 15:45 from abc import ABCMeta, abstractmethod class Payment(metaclass=ABCMeta): @abstractmethod def pay(self, money): pass class 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: def create_payment(self, method): if method == 'alipay': return AliPay(enabled_yue=True) elif method == "applepay": return ApplePay() elif method == "wechatpay": return WechatPay() else: raise NameError(method) f = PaymentFactory() p = f.create_payment('alipay') p.pay(100)