简单工厂模式
内容:
不直接向客户端暴露对象创建的实现细节,而是通过一个工厂类来负责创建产品类的实例
角色:
- 工厂角色(Creator)
- 抽象产品角色(Product)
- 具体产品角色(Concrete Product)
from abc import ABCMeta, abstractmethod
class Payment(metaclass=ABCMeta):
# abstract class
@abstractmethod
def pay(self, money):
pass
class AliPay(Payment):
def __init__(self, use_huabei=False):
self.use_huabei = use_huabei
def pay(self, money):
if self.use_huabei:
print(f'花呗支付{money}元')
else:
print(f'支付宝支付{money}元')
class WechatPay(Payment):
def pay(self, money):
print(f'微信支付{money}元')
class PaymentFactory():
def create_payment(self, method):
if method == 'alipay':
return AliPay()
elif method == 'wechat':
return WechatPay()
elif method == 'huabei':
return AliPay(use_huabei=True)
else:
raise TypeError(f'No such payment method {method}')
# client
if __name__ == '__main__':
pf = PaymentFactory()
p = pf.create_payment('huabei')
p.pay('100')
优点:
- 隐藏了对象创建的实现细节
- 客户端不需要修改代码
缺点:
- 违反了单一职责原则,将创建逻辑集中移到一个工厂类中
- 当添加新的产品时,需要修改工厂类代码,违反了开闭原则
网友评论