持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天
介绍
- 构造器模式也叫做建造者、生成器模式。其核心思想就是将复杂对象的构建与它的表示分离,使得同样的构建可以创建不同的表示。
- 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
使用场景
那么构造器模式适用的场景总结:适用于给定一个基础模板,可以配置多个参数,从而得到不同的结果。也就是说能够在此基础模板的基础上配置自己想要显示的模板样式。
-
需要生成的对象具有复杂的内部结构
-
需要生成的对象内部属性本身相互依赖
应用实践
职责明确
-
builder:为创建一个产品对象的各个部件指定抽象接口。
-
ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口。
-
Director:构造一个使用Builder接口的对象。
-
Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
实现
// Product
public class Product1 {
constructor(name) {
this.name = name;
}
}
public class Product2 {
constructor(name) {
this.name = name;
}
}
// builder 声明接口
abstract class Builder {
public abstract create(): void;
}
//ConcreteBuilder
class Product1Builder extends Builder {
private name;
publick create() {
const product1 = new Product1('产品1')
console.log('生成:' + product1.name)
}
}
class Product2Builder extends Builder {
private name;
publick create() {
const product2 = new Product2('产品2')
console.log('生成:' + product2.name)
}
}
// Director
public class Director {
public void gotoBuild(builder) {
builder.create();
}
}
//生成建筑者
const product1Builder = new Product1Builder()
const product2Builder = new Product2Builder()
//生成指挥长
const director = new Director()
//指挥建筑产品1
director.gotoBuild(product1Builder)
//指挥建筑产品2
director.gotoBuild(product2Builder)
汇总
Builder模式在应用过程中可以根据需求需要改变,如果创建的产品类只有一种,只需要一个具体建造者,可以省略抽象建造者,甚至可以去除指挥者的角色。
建造者模式主要用于“分布构建一个复杂的对象”,它很容易进行扩展。
如果有新的需求,通过实现一个新的建造者类就可以完成,并且建造者模式解耦了对象本身与构建过程,使得我们不用关心具体的建造过程。
优点
-
各个具体的构建器都是相互独立的, 利于系统的扩展。
-
客户端不必知道具体产品内部的实现。
-
建造者独立,易扩展。
-
便于控制细节风险。
缺点
- 产品组成部分必须要相同, 限制了使用范围。
- 假如产品内部变化复杂, 会增加更多的建造者类。