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. 针对接口编程,而不是针对实现编程
* 不将变量类型声明为某个特定的具体类,而是声明为某个接口。
* 客户程序无需获知对象的具体类型,只需要知道对象所具有的接口。
* 减少系统中各部分的依赖关系,从而实现“高内聚、松耦合”的类型设计方案

 

posted @ 2020-07-01 16:12  种树飞  阅读(215)  评论(0编辑  收藏  举报