简单工厂模式
内容:不直接向客户端暴露对象创建的实现细节,而是通过一个工厂类来负责创建产品类的示例。
角色:
- 工厂角色(Creator)
- 抽象产品角色(Product)
- 具体产品角色(Concrete Product)
优点:
- 隐藏了对象创建实现细节
- 客户端不需要更改代码
缺点:
- 违反了单一职责,将创建逻辑几种集中到一个工厂类里
- 当添加产品时,需要修改工厂类代码,违反了开闭原则
from abc import ABCMeta, abstractmethod
class Pay(metaclass=ABCMeta):
@abstractmethod
def pay(self, money):
pass
class Weweixinpay(Pay):
def pay(self, money):
print('weixin: %s' % money)
class Alipay(Pay):
def __init__(self, use_huabei=False):
self.use_huabei = use_huabei
def pay(self, money):
if self.use_huabei:
print('alipay use_huabei: %s' % money)
else:
print('alipay: %s' % money)
class PaymentFactory(object):
def create_payment(self, method):
## 可以做一些通用的逻辑处理, 同时隐藏一些内部逻辑实现
if method == 'alipay':
return Alipay()
elif method == 'use_huabei':
return Alipay(use_huabei=True)
if method == 'weixin':
return Weweixinpay()
payment_factory = PaymentFactory()
payment = payment_factory.create_payment('use_huabei')
payment.pay(100)