• python设计模式之工厂方法


      继上篇简单工厂博客的例子, 走进到2000年,人们对鞋子的质量要求开始提升了,人们愿意花更高的价格获得质量更好的鞋子,于是万能造小作坊开始转型了专做一种鞋型, 这样工人的熟练度高了做出来的鞋子质量也更好了,慢慢地 A作坊我就专门生产老北京布鞋, B作坊专门生产板鞋, C作坊专门生产山地鞋,专门的作坊生产唯一的鞋型,和我们接下来说的工厂方法设计模式一个,一个工厂生产一种产品。

      工厂方法设计模式GOF官方解释是: 定义一个用于创建对象的接口, 让子类决定实例化哪一个类, 工厂方法模式使得一个类的实例化延迟到了子类。

    结构图如下:

    01、 创建我们的工厂基类和产品基类

    class Shoes:
        def put(self):
            print("终于穿上新鞋了")
            
    
    class Factory:
        
        def produce_shoes(self):
            print("吭呲吭呲生产鞋子")

    02、创建产品子类

    class BeiJingShoes(Shoes):
    
        def put(self):
            print("终于穿上老北京鞋了")
    
    
    class BanShoes(Shoes):
    
        def put(self):
            print("终于穿上板鞋了")
    
    
    class MountShoes(Shoes):
    
        def put(self):
            print("终于穿上山地鞋了")

    03、创建工厂子类

    class BeiJingFactory(Factory):
        
        def produce_shoes(self):
            return BeiJingShoes()
    
    
    class BanFactory(Factory):
    
        def produce_shoes(self):
            return BanShoes()
    
    
    class MountFactory(Factory):
    
        def produce_shoes(self):
            return MountShoes()

    04、 执行我们的主程序

    if __name__ == "__main__":
        beijing_factory = BeiJingFactory()
        ban_factory = BanFactory()
        mount_factory = MountFactory
        beijing_shoes = beijing_factory.produce_shoes()
        beijing_shoes.put()

      我们想生产什么种类的鞋子,我们就实例化对应的工厂,即使在我们工作中创建需求经常变,我们只要创建对应的工厂和产品类就可以了。

    05、总结

    1. 此模式隔离了类对象的使用者和具体类型间的耦合关系。如果面对一个经常变化的具体类型, 紧耦合关系会导致软件的脆弱。
    2. 通过面向对象的手法, 将所要创建的具体对象工作延迟到了子类, 从而实现一种扩展而非更改的策略,较好地解决了这种紧耦合关系。
    3. 缺点在于每个创建工厂的方法参数要一致

    最后奉上设计模式八大设计原则:

    1. 依赖倒置原则(DIP)
    * 高层模块(稳定)不应该依赖于低层模块(变化),二者都应该依赖于抽象(稳定) 。
    * 抽象(稳定)不应该依赖于实现细节(变化) ,实现细节应该依赖于抽象(稳定)。
    2. 开放封闭原则(OCP)
    * 对扩展开放,对更改封闭。
    * 类模块应该是可扩展的,但是不可修改。
    3. 单一职责原则(SRP)
    * 一个类应该仅有一个引起它变化的原因。
    * 变化的方向隐含着类的责任。
    4. Liskov 替换原则(LSP)
    * 子类必须能够替换它们的基类(IS-A)。
    * 继承表达类型抽象。
    5. 接口隔离原则(ISP)
    * 不应该强迫客户程序依赖它们不用的方法。
    * 接口应该小而完备。
    6. 优先使用对象组合,而不是类继承
    * 类继承通常为“白箱复用”,对象组合通常为“黑箱复用” 。
    * 继承在某种程度上破坏了封装性,子类父类耦合度高。
    * 而对象组合则只要求被组合的对象具有良好定义的接口,耦合度低。
    7. 封装变化点
    * 使用封装来创建对象之间的分界层,让设计者可以在分界层的一侧进行修改,而不会对另一侧产生不良的影响,从而实现层次间的松耦合。
    8. 针对接口编程,而不是针对实现编程
    * 不将变量类型声明为某个特定的具体类,而是声明为某个接口。
    * 客户程序无需获知对象的具体类型,只需要知道对象所具有的接口。
    * 减少系统中各部分的依赖关系,从而实现“高内聚、松耦合”的类型设计方案
  • 相关阅读:
    [CFNews] Ediscovery: 4 scenarios that call for computer forensics
    [CFNews] MacForensicsLab发布MacLockPick 3.0
    [CFNews] Logicube也欲分“山寨机”取证一杯羹
    [CFNews] Tableau 发布全功能只读接口T35689iu
    [转载] Windows 8 TypedURLsTime
    [CFNews] Guidance发布EnCase V7.04.01中文及英文版
    [CFNews] AIS Inc. 发布苹果取证产品MacResponse LE
    [CFNews] Office 20072010、PGP全盘加密快速破解,Passware Kit 11.7发布
    [CFNews] GSI发布EnCase v7.04
    [CFNews] Paraben发布ProjectAPhone新型号ICD8000
  • 原文地址:https://www.cnblogs.com/lifei01/p/13219809.html
Copyright © 2020-2023  润新知