设计模式之工厂模式

设计模式,工厂,模式 · 浏览次数 : 5

小编点评

**定义** 在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型。 **工厂模式** 工厂模式是一种设计模式,其核心思想是在设计中,将不同的生产过程委托给专门的生产线,以提高代码可读性和可维护性。 **流程** 1. 客户直接找对应的生产线。 2. 前台向生产线提供需求。 3. 生产线根据需求构建产品并将其交付给客户。 **示例** ``` // 使用工厂模式创建一个生产线 const productionLine = factory.createProductionLine(); // 客户只需要找工厂前台,工厂前台会通知对应的生产线,并将生产好的产品交付给客户 ``` **代码示例** ``` // factory.js export function createProductionLine() { return { build: function() { // 生产线构建过程 }, deliver: function(customer) { // 生产线将产品交付给客户 } }; } ``` **总结** 1. 单一职责原则:每个生产线只负责生产自己的产品。 2. 开闭原则:允许在需要时添加新的产品线。 3. 拦截并调度的作用:可以拦截并处理生产线请求,例如处理库存或订单处理等。

正文

1. 定义

在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型

2. 口语化举例

工厂里组装台灯,流程、配件等有多种方式,每种台灯有自己的生产线

现在,需要某一种台灯,一种方式是直接去找这个台灯的生产线生成,这会令人烦恼,因为寻找是一件无聊而繁琐的事情

另一种方式是成立一个工厂前台,需要什么台灯就只需要给前台说明,前台会告诉对应的生产线,并将生产好的台灯交付给你

这流程就简单多了,不管是谁来,他都只需和前台联系,然后工厂就会给他对应的产品,这就是工厂模式

下面的描述会沿用这个上述这个场景

3. 图表示例

未使用工厂模式之前,客户直接找对应的生产线

graph LR 生产线A --> 客户A --> 生产线A 生产线A --> 客户B --> 生产线A 生产线B --> 客户A --> 生产线B 生产线B --> 客户B --> 生产线B 生产线C --> 客户A --> 生产线C 生产线C --> 客户B --> 生产线C

使用工厂模式之后,客户只需找工厂前台,工厂前台接受需求并给出产品

graph LR 生产线A --> 工厂前台 生产线B --> 工厂前台 --> 客户A --> 工厂前台 生产线C --> 工厂前台 --> 客户B --> 工厂前台

4. 源码示例

广为人知,Vue使用虚拟DOM,虚拟DOM的节点称为VNode

参考Vue官方文档:渲染函数 & JSX | Vue.js (vuejs.org),创建一个VNode只需要一个h()函数

然而这个VNode是很复杂的,它具有众多的参数、类型,最后它会返回一个VNode

它的调用过程大致如下:

graph LR h函数 --> createVNode函数 --> _createVNode函数 --> createBaseVNode函数

VNode有多种,但是你只需调用h()函数即可获得各种VNode

5. 总结

5.1 设计原则

  • 单一职责原则

    每个生产线只负责生产自己的产品,前台只负责通知调度,职责明确

  • 开闭原则

    要添加新的产品线只需告诉前台即可

5.2 适用场景

  • 无法预知对象确切类别及其依赖关系时, 可使用工厂方法

    无法确定每次具体生产什么,所以前台来协商客户并告知工厂生产线

  • 构建能扩展的软件库或框架的内部组件, 可使用工厂方法

    前台的存在使得要添加新的产品线只需告诉前台即可

  • 复用现有对象来节省系统资源, 而不是每次都重新创建对象, 可使用工厂方法

    前台具有拦截并调度的作用,如果要生产的产品有库存,前台可以直接交付给客户,无需再告诉生产线

6. 参考资料

[1] 工厂方法设计模式 (refactoringguru.cn)

[2] 渲染函数 & JSX | Vue.js (vuejs.org)

与设计模式之工厂模式相似的内容:

设计模式之工厂模式

待填

设计模式之工厂模式

工厂模式是一种创建型设计模式,它提供了一个用于创建对象的接口,但允许子类决定实例化哪个类。工厂方法让一个类的实例化延迟到其子类。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在软件开发中,对象的创建和使用是常见的操作。然而,对象的创建过程常常会涉及到复杂的逻辑和多变的需求。为了

设计模式之工厂模式

工厂模式是一种对象创建型模式,它提供了一种创建对象的最佳实践。在工厂模式中,我们在创建对象时不使用 new 关键字,而是通过调用工厂方法来创建对象。工厂方法是一种在子类中定义的方法,该方法负责实例化对象。工厂方法可以返回不同的对象类型,因此工厂模式可以创建一组相关或不相关的对象。这样就可以将对象的创

设计模式之工厂模式(学习笔记)

定义 工厂方法模式是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类来决定实例化哪一个类。工厂方法使得类的实例化延迟到子类,这样可以让客户端在不需要知道具体类的情况下创建对象。工厂方法模式通过使用继承和多态性,允许子类来控制对象的创建方式,能够更好地应对对象创建的复杂性和变化性。 为什么

设计模式之抽象工厂模式(学习笔记)

定义 抽象工厂模式是一种创建型设计模式,它提供一个接口,用于创建一系列相关或依赖的对象,而无需指定它们的具体类。抽象工厂模式将对象的创建过程抽象化,允许子类通过实现具体工厂类来定制对象的创建。 为什么使用抽象工厂模式 产品族的一致性 抽象工厂模式确保同一产品族中的对象之间的一致性。 部分遵循开闭原则

设计模式之简单工厂模式(学习笔记)

定义 简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,它定义一个用于创建对象的接口,但由一个单独的类来实现实际创建的工作。简单工厂模式通过在一个类中集中管理对象的创建过程,可以减少客户端与具体类之间的耦合,使得代码结构更加清晰和易于维护。通过专门定义一个类来负责创建

【23种设计模式】工厂方法模式(二)

## 前言 在讲述之工厂方法模式前,我们来先了解简单工厂模式,简单工厂模式是最简单的设计模式之一,它虽然不属于GoF的23种设计模式,但是应用也较为频繁,同时它也是学习其他创建型模式的基础。下面我们来先了解下简单工厂模式,然后针对它的缺点来引出工厂方法模式。 ## 简单工厂模式定义 **简单工厂模式

软件设计模式系列之四——简单工厂模式

简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,用于对象的创建,它属于工厂模式的一种。简单工厂模式的主要目标是封装对象的创建过程,使客户端代码与具体类的实例化解耦,从而提高代码的可维护性和可扩展性。

设计模式之适配器模式(学习笔记)

定义 适配器模式是一种结构型设计模式,它允许将一个类的接口转换为客户端希望的另一个接口。适配器使得原本由于接口不兼容而不能一起工作的类可以协同工作。通过创建适配器类,可以将现有类的接口转换成目标接口,从而使这些类能够在一起工作。 为什么使用适配器模式 兼容性 适配器模式能够解决由于接口不兼容而无法直

软件设计模式系列之八——适配器模式

适配器模式(Adapter Pattern)是一种结构性设计模式,它允许将一个类的接口转换成客户端希望的另一个接口。适配器模式通常用于解决两个不兼容接口之间的兼容性问题,使得不同接口的类可以一起工作。这个模式涉及一个称为适配器的类,它充当两个不同接口之间的桥梁,使得它们可以协同工作。