工厂模式
- 定义:不直接向客户暴露对象创建实现的细节,而是通过一个工厂类来负责创建产品类的实例
- 角色:抽象产品角色,具体产品角色,工厂角色
- 使用场景:工厂模式是创建型模式,它的作用是创建对象
- 优点:隐藏了对象创建产品的细节,客户段不需要修改代码
- 缺点:违反了单一职责原则,将创建逻辑集中到一个工厂里
class Payment(object):
'''抽象产品角色'''
def __init__(self, name):
self.name = name
def pay(self):
raise NotImplemented('请使用同名pay方法')
class AiliPay(Payment): #支付宝
'''具体产品角色'''
def pay(self):
print(f'{self.name}使用了支付宝支付')
class WeChat(Payment): #微信支付
'''具体产品角色'''
def pay(self):
print(f'{self.name}使用了微信支付')
#归一化设计
import sys
class PamentFactory: #工厂角色
def pays(self,kind,name):
if hasattr(sys.modules['__main__'],kind): #判断是否可以被反射
if callable(getattr(sys.modules['__main__'],kind)):
s=getattr(sys.modules['__main__'], kind)(name)
s.pay()
else:
print('不可以被反射')
p=PamentFactory()
f=p.pays('WeChat','xiaotong')
s=p.pays('AiliPay','minmin')
# xiaotong使用了微信支付
# minmin使用了支付宝支付