zoukankan      html  css  js  c++  java
  • 抽象工厂模式

     抽象工厂(AbstractFactory)模式的定义:是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无需指定所要产品的具体类就能得到同族的不同等级的产品的模式结构

    抽象工厂核心:
    1:为同系列产品构造对象
    2:绕开"new"来创建对象

    class Factory:
        def create(self):
            return XXX()   # 构造新对象

    只需要"new"一个工厂出来 ,我就能生产很多XXX对象了

    一组相关或相互依赖的对象
    这说的是两个或多个对象之间存在相互依赖或相关的关系。比如在实现生活中对应笔:有笔盖、笔芯、笔筒,我买只新笔的时候应该得到的是个整只笔
    而不是一部分。


    无需指定所要产品的具体类就能得到同族的不同等级的产品
    这里所说的就是“一系列”的意思。如我买钢笔你应该给我整只笔,而不是只给我笔盖或笔芯;或我买水笔你给我的应包含笔盖、笔芯、笔筒。

    通用类图

    实例

    '''
    抽象工厂模式
    
    
    例子:笔与笔盖
    '''
    
    import abc
    
    
    class AbsPen(abc.ABC):
        @abc.abstractmethod
        def write(self):
            pass
    
    
    class WaterPen(AbsPen):
        def write(self, s):
            return "水彩笔"
    
    
    class BallPen(AbsPen):
        def write(self):
            return "圆珠笔"
    
    
    class AbsCover(abc.ABC):
        @abc.abstractmethod
        def close(self):
            pass
    
    
    class WaterPenCover(AbsCover):
        def close(self):
            return "水彩笔盖"
    
    
    class BallPenCover(AbsCover):
        def close(self):
            return "圆珠笔盖"
    
    
    class IPenFactory(abc.ABC):
    
        # 生产钢笔
        @abc.abstractmethod
        def new_pen(self):
            pass
    
        # 生产笔盖
        @abc.abstractmethod
        def new_cover(self):
            pass
    
    
    class BallPenFactory(IPenFactory):
    
        def new_pen(self):
            return BallPen()
    
        def new_cover(self):
            return BallPenCover()
    
    
    class WaterPenFactory(IPenFactory):
    
        def new_pen(self):
            return WaterPen()
    
        def new_cover(self):
            return WaterPenCover()
    
    
    if __name__ == "__main__":
    
        factory = BallPenFactory()
    
        # 生产3套
        pen1 = factory.new_pen()
        cover1 = factory.new_cover()
    
        pen2 = factory.new_pen()
        cover2 = factory.new_cover()
    
    
        pen3 = factory.new_pen()
        cover3 = factory.new_cover()
    
        print(pen1.write())
        print(cover1.close())
  • 相关阅读:
    ~随笔A007~html中input输入框的字数限制、同步input的输入内容至div中
    ~随笔A006~微信扫码的授权、用户绑定、关注公众号、消息反馈
    【CV】实验二:特征检测与匹配
    【笔记】DLX算法及常见应用
    【笔记】和算法无关的那些东东
    【笔记】康拓展开&逆康拓展开
    【笔记】离散对数
    【笔记】Shift-And算法&Shift-OR算法
    【模板】中缀表达式求值
    【笔记】数据库系统
  • 原文地址:https://www.cnblogs.com/whnba/p/11928830.html
Copyright © 2011-2022 走看看