前言
在《设计模式》一书中工厂模式提到了:
但是在实际过程中还有一种工厂模式经常被使用,那就是 简单工厂模式(Simple Factory)。有一种常见的分类的方法:根据产品是由具体产品还是具体工厂可以分为 工厂方法模式 和 简单工厂模式;根据工厂的抽象程度可以分为 工厂方法模式 和 抽象工厂模式。接下来会通过例子对比简单工厂模式和工厂方法模式。
工厂意图
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。
别名
虚构造器(Virtual Constructor)
案例
第一阶段
小李开了一个代工厂,专门帮各大厂商生产手机,一开始只有小米找他生产小米手机(MiPhone),后来质量过硬,声名远播,苹果公司也找上门了,准备让他生产苹果手机,生意来了,小李小手一挥,停工几个月,加了一个生产线专门生成苹果手机(Iphone)。于是乎,现在一个工厂有两个生产线。
第一阶段 UML 图
让我们借助 UML 图直观了解一下工厂现在的样子。
第一阶段代码
通过代码去实现这个逻辑
from abc import ABC, abstractmethod # 手机 class Phone(ABC): @abstractmethod def make(self): pass # 苹果手机 class Apple(Phone): def make(self): print("make apple") # 小米手机 class XiaoMi(Phone): def make(self): print("make xiaomi") class Factory: def product_phone(self, mobile_type): if mobile_type == 'apple': return Apple() else: return XiaoMi() if __name__ == '__main__': factory = Factory() factory.product_phone('apple').make() factory.product_phone('xiaomi').make()
看一下运行结果:
make apple
make xiaomi
第二阶段
随着第一阶段的订单完成,现在越来越多的手机厂商来找小李来生产手机,问题来了,生产线改造需要导致整个工厂停工一段时间,每次停工对工厂来说都是巨大的损失。那么该怎么解决问题呢?一个工厂似乎不够用了,那么该怎么解决呢? 把所有的生产线独立出来到单独的工厂,这样子需要生产新的手机只需要新增新的工厂就好了,不会影响其他的手机的生产。
第二阶段 UML 图
同样让我们借助 UML 图了解一下这个阶段工厂的样子吧。
第二阶段代码
同样让我们借助代码去实现这一阶段的逻辑
from abc import ABC, abstractmethod # 抽象工厂 class AbastractFactory(ABC): @abstractmethod def product_phone(self): pass # 苹果工厂 class AppleFactory(AbastractFactory): def product_phone(self): return Apple().make() # 小米工厂 class XiaomiFactory(AbastractFactory): def product_phone(self): return XiaoMi().make() # 生产线 class Phone(ABC): @abstractmethod def make(self): pass # 苹果生产线 class Apple(Phone): def make(self): print("make apple") # 小米生产线 class XiaoMi(Phone): def make(self): print("make xiaomi") def client_product(factory:AbastractFactory): return factory if __name__ == '__main__': xiaomi = client_product(XiaomiFactory()) xiaomi.product_phone() apple = client_product(AppleFactory()) apple.product_phone()
看一下运行结果:
make xiaomi
make apple
总结
上面的案例中的俩个阶段分别对应了两个设计模式,分别是:**简单工厂模式 **和 工厂方法模式。通过案例和对比,我们不难发现它们的的优缺点。
简单工厂模式优缺点
工厂方法模式优缺点
以上就是浅析Python 简单工厂模式和工厂方法模式的优缺点的详细内容,更多关于Python 工厂模式的资料请关注小牛知识库其它相关文章!
本文向大家介绍浅析Python 抽象工厂模式的优缺点,包括了浅析Python 抽象工厂模式的优缺点的使用技巧和注意事项,需要的朋友参考一下 前言 接着上一篇的故事工厂模式继续,手机要出厂,显然光一个手机肯定是不行的,还需要包装盒、充电器等等东西。我们按照上一篇提到的工厂模式,去建立新的工厂是一点都没有问题的。但是思考一下这样子做会带来的问题,显然工厂太多了,将包装盒、充电器全部分散到各个工厂,组装
本文向大家介绍浅析.net简单工厂模式,包括了浅析.net简单工厂模式的使用技巧和注意事项,需要的朋友参考一下 编程时一门技术,更是一门艺术 简单工厂模式利用面向对象方式通过继承、封装、多态把程序的耦合度降低,设计模式使得程序更加灵活,容易修改,易于复用。 下面是服务器计算器代码: 基本验证没加,学习练习的同学可以自己加上 28种设计模式后续更新 本文就是.net设计模式中的简单工厂模式的内容了,
本文向大家介绍Java设计模式之工厂模式分析【简单工厂、工厂方法、抽象工厂】,包括了Java设计模式之工厂模式分析【简单工厂、工厂方法、抽象工厂】的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java设计模式之工厂模式。分享给大家供大家参考,具体如下: 一、 简单工厂 先来思考一个问题。我们平时写程序时,会有这种情况,A对象里面需要调用B对象的方法,这时我们使用的一般是new关键字来创建
本文向大家介绍浅析php工厂模式,包括了浅析php工厂模式的使用技巧和注意事项,需要的朋友参考一下 本系列文章来总结一下设计模式在PHP中的应用,这是第二篇创建型模式之工厂模式。 设计模式的一般介绍在第一篇文章讲了,这里就不重复。 工厂模式 实现:定义一个用于创建对象的接口,让子类决定实例化哪一个类。 应用场景:众多子类并且会扩充、创建方法比较复杂。 工厂模式分为三种:简单工厂、工厂方法、抽象工厂
活字印刷 面向对象 话说三国时期,曹操带领百万大军攻打东吴,大军在长江赤壁驻扎,军船连成一片,眼看就要灭掉东吴,统一天下,曹操大悦,于是大宴众文武,在酒席间,曹操诗兴大发,不觉吟道:喝酒唱歌,人生真爽。众文武齐呼:“丞相好诗!于是一臣子速命印刷工匠刻板印刷,以便流传天下。” 样张出来给曹操一看,曹操感觉不妥,说到:“喝与唱,此话过俗,应该为‘对酒当歌’较好!”,于是此臣就命工匠重新来过。工匠眼看连
我正在学习新的设计模式 我编写了一个简单的工厂类,如下所示 我们创建Factory类,如下所示: 现在,当客户端想要添加名为IceCream的新项目时,他们只需创建名为IceCreamFactory的新工厂并从中创建IceCream,如下所示: 我的理解正确吗?我们在这里满足了开闭原则,但对于每个产品(项目),我们都需要一个工厂类,这不是一个可管理的噩梦吗? 注:我指的是一篇文章https://w