设计模式之工厂模式

设计模式,工厂,模式 · 浏览次数 : 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 关键字,而是通过调用工厂方法来创建对象。工厂方法是一种在子类中定义的方法,该方法负责实例化对象。工厂方法可以返回不同的对象类型,因此工厂模式可以创建一组相关或不相关的对象。这样就可以将对象的创

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

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

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

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

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

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

【设计模式】观察者模式

设计模式 【设计模式】工厂方法模式 【设计模式】抽象工厂模式 【设计模式】单例模式 【设计模式】策略模式 【设计模式】观察者模式 一、介绍 观察者模式是一种行为设计模式,当一个对象的状态发生改变时,依赖(观察)它的对象会接收到通知,并进行自动的更新操作。 举例:某公司发布了一款新的手机,性能很强大,

【23种设计模式】抽象工厂模式(三)

## 前言 在抽象工厂模式开篇之前,我们先思考一个问题,如果我们要设计一套房子,其他的组件暂时不考虑,我们仅仅考虑房顶、地板、窗户、房门进行设计。什么样的风格暂时未知,可能会有很多种类。可以先设计一套古典风格的房子,再设计一套现代风格的房子,再设计一套欧式风格的房子....这么多套房子需要设计,需求

设计模式学习(三):工厂模式

设计模式学习(三):工厂模式 作者:Grey 原文地址: 博客园:设计模式学习(三):工厂模式 CSDN:设计模式学习(三):工厂模式 工厂模式 工厂模式是创建型模式,工厂模式分为:简单工厂,工厂方法和抽象工厂三种类型。 简单工厂 这个模式很简单,比如我们需要制造不同类型的鼠标,我们只需要创建一个鼠

简易的工厂设计模式

工厂设计模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,而无需暴露对象的创建逻辑。在工厂模式中,我们定义一个接口或抽象类,该接口或抽象类用于创建对象,但让子类决定要实例化的类。工厂方法模式使类的实例化延迟到其子类。 下面是一个完整的C#实现案例: 首先,我们定义一个接口,用于创建对象: p