• 工厂模式-设计模式-第4篇


    1. 工厂模式

    from abc import ABCMeta, abstractmethod
    
    
    class Payment(metaclass=ABCMeta):
    
        @abstractmethod
        def pay(self, money):
            pass
    
    
    class Alipay(Payment):
        def __init__(self, use_huabei=False):
            self.use_huabei = use_huabei
    
        def pay(self, money):
            if self.use_huabei:
                print("使用花呗支付 %d " % money)
            else:
                print("Ali payed %d" % money)
    
    
    class WechatPay(Payment):
    
        def pay(self, money):
            print("Wechat pay %d" % money)
    
    
    class PaymentFactory(metaclass=ABCMeta):
    
        @abstractmethod
        def create_payment(self):
            pass
    
    
    class AliPayFactory(PaymentFactory):
        def create_payment(self):
            return Alipay()
    
    
    class WechatPayFactory(PaymentFactory):
        def create_payment(self):
            return WechatPay()
    
    
    class HuabeiPayFactory(PaymentFactory):
        def create_payment(self):
            return Alipay(use_huabei=True)
    
    
    if __name__ == '__main__':
        pf = HuabeiPayFactory()
        p = pf.create_payment()
        p.pay(100)
    
    

    假设需要增加一种支付方式 银联支付
    则需要 增加两个类 BankPay BankPayFactory

    from abc import ABCMeta, abstractmethod
    
    
    class Payment(metaclass=ABCMeta):
    
        @abstractmethod
        def pay(self, money):
            pass
    
    
    class Alipay(Payment):
        def __init__(self, use_huabei=False):
            self.use_huabei = use_huabei
    
        def pay(self, money):
            if self.use_huabei:
                print("使用花呗支付 %d " % money)
            else:
                print("Ali payed %d" % money)
    
    
    class WechatPay(Payment):
    
        def pay(self, money):
            print("Wechat pay %d" % money)
    
    
    class BankPay(Payment):
    
        def pay(self, money):
            print("银联支付 pay %d" % money)
    
    
    class PaymentFactory(metaclass=ABCMeta):
    
        @abstractmethod
        def create_payment(self):
            pass
    
    
    class AliPayFactory(PaymentFactory):
        def create_payment(self):
            return Alipay()
    
    
    class WechatPayFactory(PaymentFactory):
        def create_payment(self):
            return WechatPay()
    
    
    class HuabeiPayFactory(PaymentFactory):
        def create_payment(self):
            return Alipay(use_huabei=True)
    
    
    class BankPayFactory(PaymentFactory):
        def create_payment(self):
            return BankPay()
    
    
    if __name__ == '__main__':
        pf = BankPayFactory()
        p = pf.create_payment()
        p.pay(100)
    

    对于与每个 具体的产品类 (WechatPay AliPay BankPay) 必须增加 相应的 工厂类 (WechatPayFactory AliPayFactory BankPayFactory)

  • 相关阅读:
    C#中datagridview单元格值改变实现模糊查找
    C#中建立treeView
    L2008 最长对称子串
    第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明)
    GPLT团体程序设计天梯赛练习集 L1041~L1050
    GPLT团体程序设计天梯赛练习集 L1051~L1060
    GPLT团体程序设计天梯赛练习集 L1061~L1072
    第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明)(热身赛)
    L2007 家庭房产 并查集
    利用反射把查询到的Table、Reader转换成List、Model
  • 原文地址:https://www.cnblogs.com/cavalier-chen/p/14715706.html
Copyright © 2020-2023  润新知