- 内容:不直接向客户暴露对象创建的实现细节,而是通过一个工厂类来负责创建产品类的实现。
- 角色:
- 工厂角色(Factory)
- 抽象产品角色(Product)
- 具体产品角色(Concrete Product)
- 优点:
- 隐藏了对象创建的实现细节。
- 客户端不需要修改代码。
- 缺点:
- 违反了单一职责原则,将创建逻辑几种到一个工厂类里。
- 当添加新产品时,需要修改工厂类代码,违反了开闭原则。 ```python from abc import abstractmethod, ABCMeta
class Payment(metaclass=ABCMeta): “抽象产品角色(Product)” @abstractmethod def pay(self, money): raise NotImplementedError
class Alipay(Payment): “阿里支付实现类” def init(self, enable_yuebao=False): self.enable_yuebao = enable_yuebao
def pay(self, money):if self.enable_yuebao:print("余额宝支付%s元" % money)else:print("支付宝支付%s元" % money)
class Applepay(Payment): “苹果支付的实现类” def pay(self, money): print(“苹果支付%s元” % money)
class PaymentFactory: “工厂角色(Factory)” def create_payment(self, method): if method == “alipay”: return Alipay() elif method == “yuebao”: return Alipay(True) elif method == “applepay”: return Applepay() else: return NameError(method)
调用实现工厂类
f = PaymentFactory() p = f.create_payment(“yuebao”) p.pay(100) ```
