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)
  • 相关阅读:
    Broadcom BCM94352z/DW1560驱动新姿势
    amd显卡更新最新驱动鼠标顿卡的解决方法
    设置 P2415Q & P2715Q 显示器使其支持 HDMI 2.0 启用 4k@60hz
    Web基础之Redis
    前端基础之AJAX
    Java基础之枚举
    解决Tomcat在idea控制台乱码问题
    JQuery基础
    JavaScript基础笔记
    前端基础之Html、CSS
  • 原文地址:https://www.cnblogs.com/zcfx/p/11326523.html
Copyright © 2011-2022 走看看