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
接口使用addProperty1
和addProperty2
方法添加产品属性,最后使用getProduct
方法获取创建的产品。Director
类使用Builder
类进行产品构建, Director
类与 Builder
类的作用类似于导演和演员:导演确定剧本要求,而演员根据导演的指示表演。
在上面的例子中,Builder
知道如何建造物品,它就是 实际的建造者。而Director
通过使用Builder
类来构建产品,并最终创建出最终产品(在我们的示例中为Product
)。在我们的示例中,我们只有一个实际的建造者,但实际上我们可以通过多个使用同一个指导者来引入多个不同的建造者来构建不同的产品。
进一步理解
-
构造器,建造者,生成器现在都被视为等同于设计模式的术语,因此,这三个术语可以互换使用。
-
构造器模式经常使用链式调用(就像 jQuery 一样)。 在一个对象的方法中返回
this
而不是返回其他值,这使得我们可以在不断添加属性和初始化后返回新对象。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript设计模式之构造器模式(生成器模式)定义与用法实例分析 - Python技术站