一、定义:
不直接向客户端暴露对象创建的实现细节,而是通过一个工厂类来负责创建产品类的实例
二、角色:
1、工厂角色
2、抽象产品角色
3、具体产品角色
三、例:
from abc import ABCMeta, abstractmethod
# 抽象产品角色
class Payment(metaclass=ABCMeta):
@abstractmethod
def pay(self, money):
pass
# 具体产品角色
class Alipay(Payment):
def pay(self, money):
print('alipay Payment')
class WechatPay(Payment):
def pay(self, money):
print('wechat Payment')
# 工厂角色
class PaymentFatcory():
def create_payment(self, method):
if method == 'alipay':
return Alipay()
elif method == 'wechat':
return WechatPay()
else:
raise TypeError
if __name__ == '__main__':
# 客户端不需要知道类的内部实现或初始化参数,只需要按工厂需要的参数创建实例
apay = PaymentFatcory().create_payment('alipay')
print(apay)