• 2.python工厂模式


    1.定义

    12
    定义定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行
    应用场景1、日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。
    2、数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。
    3、设计一个连接服务器的框架,需要三个协议,“POP3”、“IMAP”、“HTTP”,可以把这三个作为产品类,共同实现一个接口。
    角色抽象工厂角色(creator),
    具体工厂角色(concrete creator)
    抽象产品角色(product)
    具体产品角色(concrete product)
    客户端(client)
    优点1、一个调用者想创建一个对象,只要知道其名称就可以了。
    2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。
    3、屏蔽产品的具体实现,调用者只关心产品的接口
    缺点每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事

    2.示例

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    from abc import abstractmethod, ABCMeta
    
    
    # ---------------抽象产品角色---------------
    class Payment(metaclass=ABCMeta):
        @abstractmethod
        def pay(self, money):
            pass
    
    
    # ---------------具体产品角色---------------
    class AliPay(Payment):
        def __init__(self, use_hua_bei=False):
            self.use_hua_bei = use_hua_bei
    
        def pay(self, money):
            if self.use_hua_bei:
                print("花呗支付%d元" % money)
            else:
                print("支付宝余额支付%d元" % money)
    
    
    class WeChatPay(Payment):
        def pay(self, money):
            print("微信支付%d元" % money)
    
    
    # ---------------抽象工厂---------------
    class PaymentFactory(metaclass=ABCMeta):
        @abstractmethod
        def create_payment(self):
            pass
    
    
    # ---------------具体工厂---------------
    class AliPayFactory(PaymentFactory):
        def create_payment(self):
            return AliPay()
    
    
    class WeChatPayFactory(PaymentFactory):
        def create_payment(self):
            return WeChatPay()
    
    
    if __name__ == '__main__':
        # ---client----
        pf = WeChatPayFactory()
        p = pf.create_payment()
        p.pay(200)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
  • 相关阅读:
    手写编程语言-如何为 GScript 编写标准库
    设计模式之原型模式
    Vue基础学习笔记02
    Ubuntu16.04-64位操作系统上安装Cadence Conformal10.1教程
    为什么大企业都更愿意采用私有化部署?
    Android Socket通讯 之 表情列表优化、业务逻辑优化
    Go语言之集合类型
    PMP考生必读,7月30日考试防疫要求都在这里
    人工智能对建筑学的影响,关于智能建筑的论文
    微软云计算[2]之微软云关系数据库SQL Azure
  • 原文地址:https://blog.csdn.net/weixin_44689630/article/details/126441774