• 抽象工厂模式


     抽象工厂(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())
  • 相关阅读:
    wpf 控件回车事件中调用tab实现方法
    C#中M的N次方显示
    新概念英语第三册单词
    新概念英语第二册单词
    手把手教你搭建一个vue项目
    Vuex里的module选项和移动端布局
    Vuex与axios的封装和调用
    Vue路由
    Vue脚手架的搭建和路由配置
    Vue全家桶之一Vue(基础知识篇)
  • 原文地址:https://www.cnblogs.com/whnba/p/11928830.html
Copyright © 2020-2023  润新知