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(metaclass=ABCMeta):
"""
抽象工厂角色
"""
@abstractmethod
def create_payment(self, method):
pass
class AlipayFactory(PaymentFactory):
"""
具体工厂角色
"""
def create_payment(self, method):
return Alipay()
class WeixinFactory(PaymentFactory):
def create_payment(self, method):
return Weweixinpay()
payment_factory = AlipayFactory()
payment = payment_factory.create_payment('use_huabei')
payment.pay(100)