跳转至

简单工厂

创造者模式


抽象产品

from abc import ABCMeta, abstractmethod

class Payment(metaclass=ABCMeta):
    @abstractmethod
    def pay(self, money):
        pass

具体产品

class Alipay(Payment):
    def __init__(self, user_huabei=False):
        self.user_huabei = user_huabei  # 花呗

    def pay(self, money):
        if self.user_huabei:
            print(f'支付宝花呗付款{money}元')
        else:
            print(f'支付宝付款{money}元')


class WechatPay(Payment):
    def pay(self, money):
        print(f'微信付款{money}元')

工厂

class PaymentFactry:
    def create_payment(self, method):
        if method == 'alipay':
            return Alipay()
        elif method == 'wechat':
            return WechatPay()
        elif method == 'huabei':
            return Alipay(user_huabei=True)
        else:
            raise TypeError(f'没有{method}支付')

创建的细节可以隐藏在工厂里

不像客户端暴露对象创建实现细节 而是通过工厂负责创建产品 类的实例


客户端

pf = PaymentFactry()
p = pf.create_payment('alipay')
p.pay(100)