zoukankan      html  css  js  c++  java
  • 工厂模式-设计模式-第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)

  • 相关阅读:
    MySQL8安装及使用当中的一些注意事项
    设计模式-观察者模式
    在线教育项目-day12【完善后端整合前端】
    在线教育项目-day12【微信扫码登录】
    在线教育项目-day12【OAuth2】
    在线教育项目-day12【完善登陆页面】
    在线教育项目-day12【整合前端登陆注册页面(2)】
    在线教育项目-day12【整合前端登陆注册页面(1)】
    在线教育项目-day12【解析oken信息】
    在线教育项目-day12【注册接口】
  • 原文地址:https://www.cnblogs.com/cavalier-chen/p/14715706.html
Copyright © 2011-2022 走看看