简单工厂
创造者模式
抽象产品
from abc import ABCMeta, abstractmethod
class Payment(metaclass=ABCMeta):
@abstractmethod
def pay(self, money):
pass
具体产品
class Alipay(Payment):
def __init__(self, user_huabei=False):
self.user_huabei = user_huabei # 花呗
def pay(self, money):
if self.user_huabei:
print(f'支付宝花呗付款{money}元')
else:
print(f'支付宝付款{money}元')
class WechatPay(Payment):
def pay(self, money):
print(f'微信付款{money}元')
工厂
class PaymentFactry:
def create_payment(self, method):
if method == 'alipay':
return Alipay()
elif method == 'wechat':
return WechatPay()
elif method == 'huabei':
return Alipay(user_huabei=True)
else:
raise TypeError(f'没有{method}支付')
创建的细节可以隐藏在工厂里
不像客户端暴露对象创建实现细节 而是通过工厂负责创建产品 类的实例
客户端
pf = PaymentFactry()
p = pf.create_payment('alipay')
p.pay(100)