zoukankan      html  css  js  c++  java
  • 创建型模式

    from abc import ABCMeta,abstractmethod
    
    class Payment(metaclass=ABCMeta):
        # abstract class
        @abstractmethod
        def pay(self, money):
            pass
    
    class Alipay(Payment):
        def pay(self, money):
            print("支付宝支付%d元。"%money)
        
    class WechatPay(Payment):
        def pay(self, money):
            print("微信支付%d元。"%money)
    
    class PaymentFactory:
        def create_payment(self, method):
            if method == 'alipay':
                return Alipay()
            elif method == 'Wechat':
                return WechatPay()
            else:
                raise TypeError("No such payment named %s" %method)
    
    # client
    pf = PaymentFactory()
    p = pf.create_payment('alipay')
    p.pay(100)
    

      

     如果改为:

    from abc import ABCMeta,abstractmethod
    
    class Payment(metaclass=ABCMeta):
        # abstract class
        @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("支付宝余额支付%d元。"%money)
        
    class WechatPay(Payment):
        def pay(self, money):
            print("微信支付%d元。"%money)
    
    class PaymentFactory:
        def create_payment(self, method):
            if method == 'alipay':
                return Alipay()
            elif method == 'Wechat':
                return WechatPay()
            elif method == 'huabei':
                return Alipay(use_huabei=True)
            else:
                raise TypeError("No such payment named %s" %method)
    
    # client
    pf = PaymentFactory()
    p = pf.create_payment('huabei')
    p.pay(100)
    

    隐藏了类的内部实现。

  • 相关阅读:
    网站性能之meta标签
    布局中的css要素
    MVC中配置OutputCache的VaryByParam参数无效的问题
    C# 4.0 类与继承
    想要充值手机话费吗???亿矿网找错误送话费啦
    .Net Core 依赖注入
    Hadoop实战内容摘记
    Thead,TheadPool,Task,async,await 的前世今生
    VS Code 中 使用 Git版本控制工具
    dotnet 命令大全-理论版
  • 原文地址:https://www.cnblogs.com/tianqizhi/p/12722047.html
Copyright © 2011-2022 走看看