设计模式-工厂模式

工厂方法模式:

作为抽象工厂模式的孪生兄弟,工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个,也就是说工厂方法模式让实例化推迟到子类。

工厂方法模式非常符合"开闭原则",当需要增加一个新的产品时,我们只需要增加一个具体的产品类和与之对应的具体工厂即可,无须修改原有系统。同时在工厂方法模式中用户只需要知道生产产品的具体工厂即可,无须关系产品的创建过程,甚至连具体的产品类名称都不需要知道。虽然他很好的符合了"开闭原则",但是由于每新增一个新产品时就需要增加两个类,这样势必会导致系统的复杂度增加

具体的UML类图

可乐(父工厂)

--可口可乐(子工厂)

--百事可乐(子工厂)

可乐(父产品)

--可口可乐(子产品)

--百事可乐(子产品)

由此发现:都是先创建工厂,然后在使用工厂实例获取产品。此时只有一个工厂,那么只能创建一类型的产品。(可口可乐 和百事可乐都是 一类的可乐产品。)如果此时还想创建雪碧类型的产品,那么应该如何解决? 那就需要下文的抽象工厂了。

总结:

工厂父类负责定义创建产品对象的公共方法,所以叫做工厂方法模式。

而工厂子类则负责生成具体的产品对象,即通过不同的工厂子类来创建不同的产品对象。

用户只需要关心其所需产品对应的具体工厂是哪一个即可。
缺点:
当系统中加入新产品时,除了需要提供新的产品类之外,还要提供与其对应的具体工厂类。此时就需要增加两个类。因此系统中类的个数将成对增加,增加了系统的复杂度。

相关推荐
geovindu21 小时前
rust: Mediator Pattern
开发语言·后端·设计模式·rust·中介者模式·行为模式
SENKS_DIGITAL1 天前
金属加工遇上数字化:通快展厅里的工业蜕变-森克思科技
科技·设计模式·展厅设计·展馆设计·科技展厅设计·展览设计·企业展厅设计
flower9803231 天前
C++消息总线软件开发框架AI重构版
c++·设计模式·架构
zzu123zsw2 天前
业务拆分后的治理深水区:解构企业级微服务六大核心设计模式与高可用落真实践
微服务·设计模式·架构·高可用·微服务架构设计
牧瀬クリスだ2 天前
观察者模式:一个对象变化,一群对象自动响应
java·观察者模式·设计模式
拆房老料2 天前
【第四部分:Agentic 智能体设计模式】16. 一个 Prompt 搞不定复杂任务?试试 Prompt Chaining
java·前端·人工智能·设计模式·prompt
MobotStone3 天前
AI 写代码越来越爽,但程序员可能越来越废了
人工智能·设计模式
墨子夕3 天前
设计模式——Java × Python 双语言精讲 · 23 个经典模式 + 现代演进(前言篇)
java·开发语言·设计模式
墨子夕3 天前
设计模式——Java × Python 双语言精讲 · 23 个经典模式 + 现代演进(第一篇)
java·python·设计模式
General_G3 天前
创建型模式—原型(Prototype)模式
c++·设计模式·原型模式