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)

  • 相关阅读:
    初学c课程笔记整理7-->>二维数组、字符串、指针
    初学c课程笔记整理6-->>数组
    ipad上自定义view的旋转适配
    苹果mac电脑中brew的安装使用及卸载详细教程
    Apple、Google、Microsoft的用户体验设计原则
    iOS图片拉伸技巧
    子网掩码解析【转载】
    Ios8,Xcode6下 设置Launch Image 启动图片
    ios8 设置单元格分割线无效
    简述UIScrollView的属性和用法
  • 原文地址:https://www.cnblogs.com/cavalier-chen/p/14715706.html
Copyright © 2011-2022 走看看