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)

  • 相关阅读:
    后台接受ajax传递值的实例代码
    如何动态添加和删除一个div
    模拟实现兼容低版本IE浏览器的原生bind()函数功能
    javascript当文本框获得焦点设置边框
    js实现未知宽高的元素在指定元素中垂直水平居中
    产品图片无缝水平滚动效果代码
    jQuery实现的鼠标滑过切换图片代码实例
    如何实现在密码框如出现提示语
    JS 中 Class
    从网页源代码来找flash播放器腾讯视频源地址
  • 原文地址:https://www.cnblogs.com/cavalier-chen/p/14715706.html
Copyright © 2011-2022 走看看