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