【设计模式】第5节:创建型模式之“简单工厂、工厂方法和抽象工厂模式”

一、简单工厂模式

ProductFactory是创建商品的工厂,商品Product可以实现Product接口中的一些功能。

当需要根据入参的不同生成多种不同的产品时,可以将生成不同产品的逻辑剥离出来,使用产品工厂创建不同的产品。

二、工厂方法

ConcreteFactory是具体工厂,用来创建具体产品ConcreteProduct,ProductFactory是创建工厂的工厂,用来创建具体工厂。具体商品ConcreteProduct可以实现Product接口中的一些功能。

三、抽象工厂

当需要生成多种产品,每种产品又有多种分类时,就可以采用抽象工厂了。产品工厂ProductFactory用来重建各种大类的产品Product1和Product2,具体工厂ConcreteFactory用来创建各自产品中更细小的分类。

四、适用场景

之所以将某个代码块剥离出来,独立为函数或者类,原因是这个代码块的逻辑过于复杂,剥离之后能让代码更加清晰,更加可读、可维护。

当创建逻辑比较复杂的时候,就考虑使用工厂模式,封装对象的创建过程,将对象的创建和使用相分离。下面是两种创建逻辑比较复杂的场景:

  • 代码中存在if-else分支判断,动态地根据不同的类型创建不同的对象。针对这种情况,我们就考虑使用工厂模式,将这一大坨if-else创建对象的代码抽离出来,放到工厂类中。
  • 尽管我们不需要根据不同的类型创建不同的对象,但是,单个对象本身的创建过程比较复杂,比如要组合其他类对象,做各种初始化操作。在这种情况下,也可以考虑使用工厂模式,将对象的创建过程封装到工厂类中。

对于第一种情况,当每个对象的创建逻辑都比较简单的时候,更推荐使用简单工厂模式,将多个对象的创建逻辑放到一个工厂类中。当每个对象的创建逻辑都比较复杂的时候,为了避免设计一个过于庞大的简单工厂类,推荐使用工厂方法模式,将创建逻辑拆分得更细,每个对象的创建逻辑独立到各自的工厂类中。同理,对于第二种情况,因为单个对象本身的创建逻辑就比较复杂,所以,建议使用工厂方法模式。

相关推荐
折哥的程序人生 · 物流技术专研1 天前
第4篇:抽象工厂模式——产品族一键创建
java·设计模式·抽象工厂模式·创建型模式·编程进阶·产品族·扩充系列
端庄的战斗机2 天前
javascript 设计模式(文章很长,请自备瓜子,水果和眼药水)
开发语言·javascript·设计模式
饼干哥哥2 天前
我开发了一个「吃掉」别人Skill来升级的饕餮.Skill,现在免费开源
人工智能·设计模式·开源
CaffeinePro2 天前
什么是系统架构?架构师到底在做什么?
设计模式·架构
AI人工智能+电脑小能手2 天前
【大白话说Java面试题 第156题】【06_Spring篇】第16题:Spring 用到了哪些设计模式?
java·spring·设计模式·代理模式·工厂模式
前端百草阁2 天前
JavaScript 设计模式(23 种)
开发语言·前端·javascript·设计模式
geovindu2 天前
java: Singleton Pattern
java·开发语言·后端·单例模式·设计模式·创建型模式
geovindu3 天前
python: Functional Options Pattern
开发语言·后端·python·设计模式·惯用法模式·函数式选项模式
Kel3 天前
Pregel 为什么会成为LangGraph编排的心脏
人工智能·设计模式·架构
会周易的程序员3 天前
microLog 后端开发指南
开发语言·c++·物联网·设计模式·日志·iot·aiot