• 简单工厂模式


    一、内容

    不直接向客户端暴露对象创建的实现细节,而是通过一个工厂类来负责创建产品类的实例。

    二、角色

    工厂角色(Creator)
    抽象产品角色(Product)
    具体产品角色(Concrete Product)

    三、优点

    隐藏了对象创建的实现细节
    客户端不需要修改代码

    四、缺点

    违反了单一职责原则,将创建逻辑集中到一个工厂类中
    当添加新产品时,需要修改工厂类代码,违反了开放封闭原则

    五、代码示例

    初始的代码

    from abc import abstractmethod,ABCMeta
     2 class Payment(metaclass=ABCMeta):
     3     @abstractmethod
     4     def pay(self):
     5         pass
     6 
     7 class Alipay(Payment):
     8     def __init__(self,money):
     9         self.money = money
    10 
    11     def pay(self):
    12         print('支付宝支付了%s元'%self.money)
    13 
    14 class Whatpay(Payment):
    15     def __init__(self, money):
    16         self.money = money
    17 
    18     def pay(self):
    19         print('微信支付了%s元' % self.money)
    20 
    21 
    22 obj = Alipay(100)
    23 obj.pay()
    24 
    25 obj2 = Whatpay(200)
    26 obj2.pay()
    from abc import abstractmethod,ABCMeta
    class Payment(metaclass=ABCMeta):
        @abstractmethod
        def pay(self,money):
            pass
    
    class Alipay(Payment):
        def pay(self, money):
            print('支付宝支付了%s元'%money)
    
    class Applepay(Payment):
        def pay(self, money):
            print('微信支付了%s元' %money)
    
    class Yuebao(Payment):
        def pay(self,money):
            print('余额宝支付了%s元' %money)
    
    
    class PaymentFactory:
        '''工厂类:封装了对象创建的细节'''
        def create_payment(self,method):
            if method =='alipay':
                return Alipay()
            elif method =='applepay':
                return Applepay()
            elif method =='yuebao':
                return Yuebao()
            else:
                return NameError(method)
    
    factory = PaymentFactory()
    alipay=factory.create_payment('yuebao')
    alipay.pay(100)
  • 相关阅读:
    Ionic开发Hybrid App问题总结
    >>> 主页链接
    微信小程序之WebSocket
    Keepalived+LVS+nginx搭建nginx高可用集群
    centos7 dns(bind)安装配置
    samba安装配置
    redis数据备份还原
    gitlab部署
    gitlab数据迁移
    kubeadm部署一个Kubernetes集群
  • 原文地址:https://www.cnblogs.com/zcfx/p/11326523.html
Copyright © 2020-2023  润新知