Nest框架之builder设计模式

一.背景


🐻今天在阅读Nest小册内容的时候了解到 Nest 内构建复杂对象很多地方都用到了 builder 的设计模式,有点不理解这个设计模式的具体内容是什么,决定在此学习探究下。

二.基本概念解析


🤡建造者模式(Builder Pattern)是一种创建型设计模式,用于将对象的构建过程与其表示分离。它允许你根据相同的构建过程创建不同的表示XXX 这是给人看的吗?!!!完全看不懂,建造者模式其实是这样的。

🫥举个简单的例子,想象一下你去汉堡店点了一个🍔,这个汉堡有很多不同的部件,并且不同的🍔因为价格不同可能层数,馅料也不同,但是做汉堡的方式其实就是有限的材料堆叠,这个汉堡有不同的部件,比如,面包,鸡肉,生菜,酱料等,使用建造者模式你可以将汉堡的构建分为不同的步骤,并由不同的工人负责不同的步骤,首先你有一个🍔总监,可以理解为一个管事的,他负责监管整个汉堡的制作过程,然后你会有不同的工人,烤面包的工人,烤鸡肉的工人,放生菜的工人,涂酱料的工人,每个工人都能完成自己的任务,监管可以指挥不同的工人去制作这个你需要的汉堡,当工人工作完后,你就得到了一个汉堡

三.使用TS代码实现上述内容


🐻汉堡类,用来制作者汉堡,拿到材料组合汉堡。

js 复制代码
/**
 * @class Burger
 * @description 汉堡制作类
 */
class Burger {
  private bread: string
  private meat: string
  private lettuce: boolean
  private sauce: string
  constructor() {
    this.bread = ''
    this.meat = ''
    this.lettuce = false
    this.sauce = ''
  }

  // 放置面包
  public setBread(bread: string): void {
    this.bread = bread
  }

  // 放置肉
  public setMeat(meat: string): void {
    this.meat = meat
  }

  public setLettuce(lettuce: boolean): void {
    this.lettuce = lettuce
  }

  public setSauce(sauce: string): void {
    this.sauce = sauce
  }

  public getInfo(): string {
    let lettuceInfo = this.lettuce ? 'with lettuce' : 'without lettuce'
    return `Burger: ${this.meat} burger on ${this.bread}, ${lettuceInfo}, topped with ${this.sauce}`
  }
}

🤡汉堡构造类,用来构造不同的材料

js 复制代码
/**
 * @class BurgerBuilder
 */

class BurgerBuilder {
  private burger: Burger

  constructor() {
    this.burger = new Burger()
  }

  public buildBread(bread: string): void {
    this.burger.setBread(bread)
  }

  public buildMeat(meat: string): void {
    this.burger.setMeat(meat)
  }

  public buildLettuce(lettuce: boolean): void {
    this.burger.setLettuce(lettuce)
  }

  public buildSauce(sauce: string): void {
    this.burger.setSauce(sauce)
  }

  public getBurger(): Burger {
    return this.burger
  }
}

🫥生成汉堡的代码

js 复制代码
const builder = new BurgerBuilder()

builder.buildBread('sesame bun')
builder.buildMeat('beef')
builder.buildLettuce(true)
builder.buildSauce('ketchup')

const burger = builder.getBurger()
console.log(burger.getInfo()) // 输出:Burger: beef burger on sesame bun, with lettuce, topped with ketchup

四.对应逻辑流程图


🥱正如上方代码Burger就相当于厨师,工人提供什么材料就做什么汉堡,对工人的操作是程序员来做的,自己去提供了不同的材料就拼凑出了不同的对象,如果一个对象比较复杂,这样就能很好的拆分和复用。

五.总结


🤡builder的设计模式落实到我们生活中就是你可以根据不同的需求让机器来帮你做不同的东西,在程序中主要是为了解决复杂对象的问题,使用这种设计模式就可以很好的解决。

相关推荐
Setsuna_F_Seiei4 小时前
前端转型 Agent 开发 04 之 MCP 与 Skill(赋予 Agent 更广工作能力)
前端·agent
刘发财5 小时前
前端2秒生成500页矢量PDF,rust真的强到没朋友
前端·javascript·rust
郑州光合科技余经理6 小时前
国际版外卖系统:税率字段怎么和订单主流程解耦
android·java·开发语言·前端·后端·php·ai编程
梦想平凡6 小时前
百游棋牌源代码开发搭建教程(十):隔离部署、备份恢复与双端验收
java·前端·javascript·数据库·源代码管理
yume_sibai8 小时前
06-Rust Web 开发实战(Axum 框架 + 数据库 + JWT 认证 + 中间件 + 部署)
前端·数据库·rust
计算机魔术师9 小时前
特朗普上台打给黄仁勋:AI末日论是骗局,我们绝不让它发生
前端
troy1289 小时前
Python 基础语法(八):Web 后端开发、数据分析与可视化、网络爬虫、人工智能 / 大模型应用
前端·python·数据分析
计算机魔术师9 小时前
CEO说要慢下来,黑客说别做梦了——同一篇论文,两种命运
前端
kyriewen10 小时前
我花3天抓了一个幽灵bug,凶手藏在第4层
前端·javascript·程序员
IT_陈寒11 小时前
Java里用Stream.parallel()翻车实录,这性能还不如单线程
前端·人工智能·后端