JavaScript设计模式之构造器模式(生成器模式)定义与用法实例分析

JavaScript设计模式之构造器模式(生成器模式)定义与用法实例分析

什么是构造器模式?

构造器模式,也叫做生成器模式(Builder Pattern),是一种对象创建型模式。在构造器模式中,我们可以定义一个独立的建造者(Builder)对象,该对象封装了创建复杂对象的过程,并允许对象逐步构建。主要思想是将“建造产品的过程”与“细节”分离开来。

举个例子:你需要买一辆汽车,通常有两种方法。第一种是从出厂自行车开始,买一辆汽车的每个部件,最终将它们组装起来。这种方法被认为是一个精细的、经典的模式,但不是非常实际,因为需要花费大量时间和精力。相反,我们可以联系汽车销售商,让他们提供帮助。汽车销售商会问一些问题,比如要求什么车型、需要哪些功能、需要什么颜色等,然后复制您的这些要求,以满足您对汽车的要求。构造器模式就像这样,我们可以通过调用一个建造者对象的方法,让它为我们创建另一个对象,该对象可能包括多个部件的组合。

构造器模式的使用场景

在以下情况下,通常使用构造器模式:

  • 当你需要创建一个对象,并且它包含复杂的内部结构时,如:车辆、家等。
  • 当你需要控制内部逻辑以某种方式创建对象时,如:组装汽车时要考虑买家的需求。
  • 当你需要封装对象的创建过程并允许对象逐步构建时。

一个基本的构造器模式实例

我们来看一个基本的构造器模式实例,将展示以下三个重要概念:

  • Builder(建造者)接口或类。
  • Director(指导者)类,它在创建过程中使用该Builder类。
  • Product(产品)类,包括所有所需信息。
// 建造者接口
class Builder {
  constructor() {
    this.product = {};
  }

  addProperty1(property) {
    this.product.property1 = property;
  }

  addProperty2(property) {
    this.product.property2 = property;
  }

  getProduct() {
    return this.product;
  }
}

// 指导者类
class Director {
  constructor(builder) {
    this.builder = builder;
  }

  construct() {
    this.builder.addProperty1('value1');
    this.builder.addProperty2('value2');
  }
}

// 产品类
class Product {
  constructor(property1, property2) {
    this.property1 = property1;
    this.property2 = property2;
  }
}

// 使用构造器模式创建对象
const builder = new Builder();
const director = new Director(builder);

director.construct();
const product = new Product(
  builder.getProduct().property1,
  builder.getProduct().property2
);
console.log(product);

在这个示例中,Builder接口使用addProperty1addProperty2方法添加产品属性,最后使用getProduct方法获取创建的产品。Director类使用Builder类进行产品构建, Director类与 Builder类的作用类似于导演和演员:导演确定剧本要求,而演员根据导演的指示表演。

在上面的例子中,Builder知道如何建造物品,它就是 实际的建造者。而Director通过使用Builder类来构建产品,并最终创建出最终产品(在我们的示例中为Product)。在我们的示例中,我们只有一个实际的建造者,但实际上我们可以通过多个使用同一个指导者来引入多个不同的建造者来构建不同的产品。

进一步理解

  • 构造器,建造者,生成器现在都被视为等同于设计模式的术语,因此,这三个术语可以互换使用。

  • 构造器模式经常使用链式调用(就像 jQuery 一样)。 在一个对象的方法中返回this而不是返回其他值,这使得我们可以在不断添加属性和初始化后返回新对象。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript设计模式之构造器模式(生成器模式)定义与用法实例分析 - Python技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • windows python3安装Jupyter Notebooks教程

    一、安装Python3 如果您还未安装Python3,请在官网上下载并安装Python3的最新版本:https://www.python.org/downloads/ 二、安装Jupyter Notebook 打开Windows命令提示符或者Windows PowerShell,输入以下命令: pip3 install jupyter 等待安装完成即可。 三…

    other 2023年6月27日
    00
  • 无需右键就可以压缩解压文件

    要实现无需右键就可以压缩解压文件,我们可以使用命令行来完成该操作。下面是完整攻略: 1. 确认是否安装7-Zip 首先,我们需要确认是否已经安装了7-Zip软件。如果没有安装,需要先到7-Zip官网(https://www.7-zip.org/)进行下载并安装。 2. 打开命令行 在Windows中,打开命令行的方法是先按下Win+R快捷键,然后在运行窗口中…

    other 2023年6月27日
    00
  • Python命名空间namespace及作用域原理解析

    Python命名空间(namespace)及作用域原理解析 在Python中,命名空间(namespace)是指变量名和函数名的存储位置,用于区分不同的变量和函数。作用域(scope)是指变量和函数的可访问范围。 1. 命名空间 Python中有三种主要的命名空间: 1.1 内置命名空间(Built-in Namespace) 内置命名空间包含了Python…

    other 2023年8月19日
    00
  • 一键自动更改本机IP地址BAT执行脚本 非常好用

    一键自动更改本机IP地址BAT执行脚本攻略 本攻略将详细介绍如何使用一键自动更改本机IP地址的BAT执行脚本。该脚本可以帮助用户快速更改本机的IP地址,提供了简单且方便的方式来管理网络设置。 步骤一:创建BAT执行脚本 打开任意文本编辑器,例如记事本。 在编辑器中输入以下内容: @echo off echo 正在更改IP地址… netsh interfa…

    other 2023年7月30日
    00
  • 我是这么安装使用.net5框架的

    下面是关于如何安装和使用.NET 5框架的完整攻略。 背景 .NET 5是一个跨平台的开源框,用于构高性能、可扩展的Web应用程序、桌面应用程序和动应用程序。本攻略将介绍如何在Windows、Linux和macOS上安装和使用.NET 5框架。 步骤 1. 下.NET 5 SDK 首先,我们需要下载.NET 5 SDK。可以以下链接下载: https://d…

    other 2023年5月9日
    00
  • 批量列出所有文件名的批处理

    首先,我们需要明确批处理文件的编写目标,即在指定的文件夹中列出所有文件名,并将其输出到一个文本文件中。下面是完成这个目标的具体步骤: 步骤一:打开命令提示符窗口 在电脑屏幕上按下Win+R组合键,打开运行窗口,输入cmd并点击确定,即可打开命令提示符窗口。 步骤二:进入要扫描的文件夹 在命令提示符窗口中输入cd路径,其中路径是指要扫描的文件夹路径。例如,如果…

    other 2023年6月26日
    00
  • R语言变量重编码、重命名的操作

    R语言变量重编码、重命名的操作攻略 在R语言中,变量重编码和重命名是常见的数据处理操作。本攻略将详细介绍如何进行这些操作,并提供两个示例说明。 变量重编码 变量重编码是将原始变量的取值映射到新的取值上,常用于将分类变量转换为数值变量或者将原始取值进行分组。以下是变量重编码的步骤: 创建一个映射表,将原始取值与新取值进行对应。可以使用ifelse()函数、ca…

    other 2023年8月8日
    00
  • 易语言声明变量的步骤讲解

    易语言声明变量的步骤讲解 在易语言中,声明变量是为了给一个数据项分配内存空间,并为其指定一个名称。变量可以存储不同类型的数据,如整数、浮点数、字符串等。下面是易语言声明变量的步骤讲解: 步骤一:选择变量类型 首先,你需要选择适合你的数据的变量类型。易语言提供了多种变量类型,包括整数、浮点数、字符串、布尔值等。根据你的需求,选择合适的变量类型。 以下是一些常见…

    other 2023年8月8日
    00
合作推广
合作推广
分享本页
返回顶部