时间:2021-05-22
前言
接着上一篇的故事工厂模式继续,手机要出厂,显然光一个手机肯定是不行的,还需要包装盒、充电器等等东西。我们按照上一篇提到的工厂模式,去建立新的工厂是一点都没有问题的。但是思考一下这样子做会带来的问题,显然工厂太多了,将包装盒、充电器全部分散到各个工厂,组装什么的也是一个大问题,那么有没有更好的办法呢?答案是肯定的,抽象工厂模式。
抽象工厂意图
提供一个创建一系列相关或相互依赖对象的接口,而无需制定它们具体的累。
别名
Kit
案例
第三阶段
光生产手机远远不够,还需要生产其他配件,分散到新的工厂成本太高,也不利于维护,那就把一个类型的手机所需要的所有东西,都放到一个工厂完成,小米工厂生产小米手机以及小米手机配套的东西,苹果手机生产苹果手机以及苹果手机配套的东西,客户只需要关心要什么手机就行了。
第三阶段 UML 图
让我们借助 UML 图直观了解一下这个时候工厂的样子
第三阶段代码
通过代码去实现这个逻辑
from abc import ABC, abstractmethod# 抽象手机 class AbstractMobile(ABC): @abstractmethod def make(self): passclass XiaoMiMobile(AbstractMobile): def make(self): print("make xiaomi mobile") class AppleMobile(AbstractMobile): def make(self): print("make apple mobile")# 抽象手机配件class AbstractOthers(ABC): @abstractmethod def make(self): passclass XiaoMiOthers(AbstractMobile): def make(self): print("make xiaomi others") class AppleOthers(AbstractMobile): def make(self): print("make apple others")# 抽象工厂class AbstractFactory(ABC): @abstractmethod def create_mobile(self) -> AbstractMobile: pass @abstractmethod def create_others(self) -> AbstractOthers: passclass XiaoMiFactory(AbstractFactory): def create_mobile(self) -> XiaoMiMobile: return XiaoMiMobile().make() def create_others(self) -> XiaoMiOthers: return XiaoMiOthers().make()class AppleFactory(AbstractFactory): def create_mobile(self) -> AppleMobile: return AppleMobile().make() def create_others(self) -> AppleOthers: return AppleOthers().make() def client(factory: AbstractFactory) -> None: product_mobile = factory.create_mobile() product_others = factory.create_others() if __name__ == "__main__": client(XiaoMiFactory()) client(AppleFactory())看一下运行结果:
make xiaomi mobile
make xiaomi others
make apple mobile
make apple others
总结
如果代码需要与多个不同系列的相关产品交互, 但是由于无法提前获取相关信息, 或者出于对未来扩展性的考虑, 你不希望代码基于产品的具体类进行构建, 在这种情况下, 你可以使用抽象工厂。
在设计良好的程序中, 每个类仅负责一件事。 如果一个类与多种类型产品交互, 就可以考虑将工厂方法抽取到独立的工厂类或具备完整功能的抽象工厂类中。
抽象工厂的优缺点
优点
缺点
以上就是浅析Python 抽象工厂模式的优缺点的详细内容,更多关于Python 抽象工厂模式的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了Python设计模式之抽象工厂模式原理与用法。分享给大家供大家参考,具体如下:抽象工厂模式(AbstractFactoryPattern):提供一
上一篇说到了工厂模式,那么学习了工厂模式,抽象工厂也得学习一下。实际上,抽象工厂模式实际上就是在工厂模式的基础上再嵌套一层工厂模式而已,通过父工厂制造子工厂。只
本文实例讲述了java设计模式之工厂模式。分享给大家供大家参考,具体如下:工厂模式(factory)涉及到4个角色:抽象工厂类角色,具体工厂类角色,抽象产品类角
以下就是作者学习中遇到的问题以及代码实例,最后还给大家关于JS抽象工厂模式的学习做了总结。抽象工厂模式(AbstractFactory)就是通过类的抽象使得业务
定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。类型:创建类模式类图:抽象工厂模式与工厂方法模式的区别抽象工厂模式是工厂方法模式的升