zoukankan      html  css  js  c++  java
  • 简单工厂模式

    一、内容

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

    二、角色

    工厂角色(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)
  • 相关阅读:
    (四)STL中的算法
    (三)openssl库实现对称和非对称加密
    (十一)etcd项目
    (十二)插件之dlopen/dlsym/dlclose 加载动态链接库
    (十一)访问权限关键字publi/private/protected
    RESTful架构
    (零)TCP/IP详解综述
    (二)辗转相除法求最大公约数
    (一)简单的TcpServer
    SpringMVC异常处理
  • 原文地址:https://www.cnblogs.com/zcfx/p/11326523.html
Copyright © 2011-2022 走看看