• python设计模式(二)之简单工厂模式


     简单工厂模式,可能你不是十分掌握它的概念,但是在日常码代码中你一定不经意间用到过。

     一、类别:

      简单工厂模式又称之为静态工厂方法,属于创建型模式。

     二、定义:

      在简单工厂模式中,可以根据传递的参数不同,返回不同类的实例。简单工厂模式定义了一个类,这个类专门用于创建其他类的实例,这些被创建的类都有一个共同的父类。

    三、应用场景:

      工厂类负责创建的对象比较少。 简单工厂模式最大的优点在于实现对象的创建和对象的使用分离,但是如果产品过多时,会导致工厂代码非常复杂。简单工厂模式的要点就在于当你需要什么,只需要传入一个正确的参数,就可以获取你所需要的对象,而无须知道其创建细节。

    四、代码实现:

      看一下下面的例子:

      

    class Payment(metaclass=ABCMeta):
    
        @abstractmethod
        def pay(self, money):
            pass
    
    
    class AliPay(Payment):
    
        def __init__(self, yu_e_bao=False):
            self.yu_e_bao = yu_e_bao
    
        def pay(self, money):
    
            if self.yu_e_bao:
                print(f'use yu_e_bao pay {money}')
    
            else:
                print(f'use zhifubao pay {money}')
    
    
    class WeChat(Payment):
    
        def pay(self, money):
    
            print(f'use Wechat pay {money}')
    
    
    class Paymethod():
    
        def create_payment(self, method):
    
            if method == 'yu_e_bao':
                return AliPay(True)
    
            elif method == 'zhifubao':
                return AliPay(False)
    
            elif method == 'Wechat':
                return WeChat()
            else:
                logging.log.error('method error')   
    p = Paymethod()
    f = p.create_payment('zhifubao')
    f.pay(30)     #  use zhifubao pay 30
    f = p.create_payment('Wechat')
    f.pay(300)    #  use Wechat pay 300

      我们在调用时不关心是如何实现的,只关心我传入的参数给我返回了一个类的实例化。隐藏了对象创建代码的细节,客户端不需要修改代码。但是如果要建的实例很多,我们要逐一定义的话就很麻烦了。

      此模式还有三个角色:

      抽象产品角色:Payment类,定义产品的必要功能。

      具体产品角色:Alipay,Wechat类,具体实例化出来的对象。

      工厂角色:Paymethod类,根据参数输出具体产品。

      五、优缺点:

        优点:用户只需要传入具体产品,就可以得到实例化的类,不需要知道具体实现过程。

        缺点:如果具体产品角色很多的时候,定义简单工厂就会比较麻烦。不利于扩展。

  • 相关阅读:
    angular4(2-1)angular脚手架引入第三方类库(jquery)
    angular4(1)angular脚手架
    vue-cli中的ESlint配置文件eslintrc.js详解
    咕着的题(慢慢补吧)
    图解Js event对象offsetX, clientX, pageX, screenX, layerX, x区别
    乐视手机H5项目总结
    解决ios下的微信打开的页面背景音乐无法自动播放
    html2canvas手机端模糊问题
    H5 canvas绘制出现模糊的问题
    hammer.js中文文档
  • 原文地址:https://www.cnblogs.com/jimmyhe/p/10807140.html
Copyright © 2020-2023  润新知