当前位置: 首页 > article >正文

一天一个设计模式---生成器模式

概念

生成器模式(Builder Pattern)是一种创建型设计模式,用于构建复杂对象。它允许您逐步构造一个对象,将构建过程与最终对象的表示分离开来。这种模式通常用于创建复杂的对象,这些对象可能有多个部分组成,且构建过程可能涉及多个步骤或配置选项。

具体内容

生成器模式的主要目的是将对象的构建步骤解耦,使得您可以灵活地创建不同表示的对象,同时保持构建过程的清晰性和可维护性。它通常包含以下几个关键角色:

  1. 产品(Product): 要创建的复杂对象,该对象通常由多个部分组成。在生成器模式中,可以有多种表示形式的产品。
  2. 生成器(Builder): 定义了创建产品的接口和步骤,以及设置产品各个部分的方法。生成器抽象类或接口可能包含多个构建方法,每个方法负责构建产品的一个特定部分。
  3. 具体生成器(Concrete Builder): 实现生成器接口,负责实际构建产品的步骤和逻辑。具体生成器将产品的构建细节封装在内部,并实现了生成器中定义的构建方法。
  4. 导演(Director): 可选角色,负责指导具体生成器构建产品的步骤顺序。导演可以知道构建过程的顺序,然后委托具体生成器执行构建步骤以创建最终的产品。

类结构图

在这里插入图片描述

适用场景

作为一种创建型的设计模式,以下情况你可以考虑使用它:

  • 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
  • 当构造过程必须允许被构造的对象有不同的表示时。

实现

// 1. 产品(Product)
class Product {
  constructor() {
    this.parts = [];
  }

  addPart(part) {
    this.parts.push(part);
  }

  show() {
    console.log("Product Parts: ", this.parts.join(", "));
  }
}

// 2. 生成器接口(Builder)
class Builder {
  constructor() {
    this.product = new Product();
  }

  buildPartA() {}
  buildPartB() {}
  buildPartC() {}

  getResult() {
    return this.product;
  }
}

// 3. 具体生成器(Concrete Builder)
class ConcreteBuilder extends Builder {
  buildPartA() {
    this.product.addPart("PartA");
  }

  buildPartB() {
    this.product.addPart("PartB");
  }

  buildPartC() {
    this.product.addPart("PartC");
  }
}

// 4. 导演(Director)
class Director {
  constructor(builder) {
    this.builder = builder;
  }

  construct() {
    this.builder.buildPartA();
    this.builder.buildPartB();
    this.builder.buildPartC();
  }
}

// 客户端代码
const concreteBuilder = new ConcreteBuilder();
const director = new Director(concreteBuilder);
const product = concreteBuilder.getResult();
product.show(); // Product Parts:  PartA, PartB, PartC

http://www.kler.cn/a/157316.html

相关文章:

  • MySQL远程连接错误解决:Host is not allowed to connect to this MySQL server
  • PCL 点云分割 基于CPC算法的分割
  • 服务器数据恢复—分区结构被破坏的reiserfs文件系统数据恢复案例
  • 模型压缩相关技术概念澄清(量化/剪枝/知识蒸馏)
  • 基于Python的膳食健康系统
  • 丹摩征文活动 | Kolors入门:从安装到全面活用的对比指南
  • 双目测宽仪高质量生产利器
  • 网页中的json文档,怎么保存到本地
  • 强化学习Markov重要公式推导过程
  • 你好!斐波那契查找【JAVA】
  • 黑猫带你学eMMC协议第31篇:什么是eMMC的驱动强度(Drive Strength)
  • 详解FreeRTOS:软件定时器(高级篇—4)
  • Rust 语言:认识 Rust
  • 考研英语语法(三十九)
  • 合并两个有序链表[简单]
  • UDS 诊断报文格式
  • Vue入门——v-on标签
  • 回溯和分支算法
  • Snagit 2024.0.1(Mac屏幕截图软件)
  • 【五分钟】熟练使用numpy.cumsum()函数(干货!!!)
  • 接口压测指南
  • Spring IOC—基于XML配置和管理Bean 万字详解(通俗易懂)
  • iOS ------ UICollectionView
  • Python —— Mock接口测试
  • ElasticSearch知识体系详解
  • 解码 SQL:深入探索 Antlr4 语法解析器背后的奥秘