• 内容:不直接向客户暴露对象创建的实现细节,而是通过一个工厂类来负责创建产品类的实现。
  • 角色:
    • 工厂角色(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

  1. def pay(self, money):
  2. if self.enable_yuebao:
  3. print("余额宝支付%s元" % money)
  4. else:
  5. 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) ```