es6 语法学习 - 建造者模式

es6 语法学习 - 建造者模式

一、基本概念

建造者模式(Builder Pattern)是一种创建型设计模式,它主要用于构建一个复杂对象。该模式将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。

二、 优点

  • 代码清晰:可以通过一步一步的设置参数,来创建复杂对象,使代码更易读。
  • 可扩展性:可以灵活地增加或修改构建复杂对象的方式,而不影响使用者代码。
  • 易于维护:便于维护和改进,尤其是在复杂对象有多个可选参数时。

三、缺点

  • 类的数量增加:每个具体建造者对应一个类,可能导致类的数量增加。
  • 实现复杂:对复杂对象的建造过程,代码实现相对复杂。

四、使用场景

  • 需要生成的对象具有复杂的内部结构,且内部属性相互依赖。
  • 需要构建的对象类型较多,但构建过程相似,可以通过不同的具体建造者类来构建不同的对象。
  • 对象的构建过程需要多个步骤,且这些步骤的顺序可能不同。

五、示例代码

假设我们要构建一个表示“用户信息”(UserInfo)的复杂对象,这个对象包含多个部分,如姓名、地址、联系方式等。我们可以使用建造者模式来逐步构建这个对象。

首先,我们定义一个UserInfo类,它表示最终要构建的对象:

// UserInfo.js
class UserInfo {
  constructor(name, address, contact) {
    this.name = name;
    this.address = address;
    this.contact = contact;
  }

  // 可以添加一个方法来展示用户信息
  showInfo() {
    console.log(`Name: ${this.name}`);
    console.log(
      `Address: ${this.address.street}, ${this.address.city}, ${this.address.country}`
    );
    console.log(`Contact: ${this.contact.email}, ${this.contact.phone}`);
  }
}

接下来,我们定义一个Builder类,它包含构建UserInfo对象所需的所有步骤:

// UserInfoBuilder.js
class UserInfoBuilder {
  constructor() {
    this.userInfo = new UserInfo(
      '',
      { street: '', city: '', country: '' },
      { email: '', phone: '' }
    );
  }

  setName(name) {
    this.userInfo.name = name;
    return this; // 返回当前Builder实例,以便链式调用
  }

  setAddress(street, city, country) {
    this.userInfo.address = { street, city, country };
    return this;
  }

  setContact(email, phone) {
    this.userInfo.contact = { email, phone };
    return this;
  }

  build() {
    // 返回最终构建的UserInfo对象
    return this.userInfo;
  }
}

最后,我们可以编写一个客户端代码来使用这个建造者模式:

// client.js
const builder = new UserInfoBuilder();
const userInfo = builder
  .setName('simahenet')
  .setAddress('八卦岭', '深圳', '中国')
  .setContact('sina@163.com', '13988888888')
  .build();

userInfo.showInfo();

在这个例子中,UserInfo类表示了要构建的对象,UserInfoBuilder类包含了构建这个对象所需的所有步骤,并且每个步骤都返回Builder实例本身,以便进行链式调用。客户端代码通过创建Builder实例并逐步调用其方法来构建UserInfo对象,最后调用build方法来获取最终的对象。

这种方式使得构建复杂对象的过程变得更加灵活和可配置,因为你可以根据需要添加、删除或重新排列构建步骤。同时,它也使得代码更加清晰和易于维护,因为每个构建步骤都封装在Builder类中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值