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)
  • 相关阅读:
    (KMP Next的运用) Period II -- fzu -- 1901
    (字典树)How many--hdu--2609
    (KMP 最大表示最小表示)String Problem -- hdu-- 3374
    (KMP 暴力)Corporate Identity -- hdu -- 2328
    (KMP 扩展)Clairewd’s message -- hdu -- 4300
    (KMP 字符串处理)Substrings -- hdu -- 1238
    (KMP)Count the string -- hdu -- 3336
    JQuery弹出窗口小插件ColorBox
    jquery promot
    C#
  • 原文地址:https://www.cnblogs.com/zcfx/p/11326523.html
Copyright © 2011-2022 走看看