建造者模式Builder Pattern
又可以称为生成器模式,是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,建造者模式属于对象创建型模式。
建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。
Builder
: 抽象建造者,引入抽象建造者的目的,是将建造的具体过程交与它的子类来实现。这样更容易扩展。一般至少会有两个抽象方法,一个用来建造产品,一个是用来返回产品。ConcreteBuilder
: 具体建造者,实现抽象类的所有未实现的方法,具体来说一般是两项任务:组建产品、返回组建好的产品。Director
: 指挥者,负责调用适当的建造者来组建产品,指挥者一般不与产品类发生依赖关系,与指挥者直接交互的是建造者类,一般来说指挥者被用来封装程序中易变的部分。Product
: 产品角色,一般是一个较为复杂的对象,产品类可以是由一个抽象类与它的不同实现组成,也可以是由多个抽象类与他们的实现组成。class Product{ // 具体产品
constructor(){
this.name = null;
this.type = null;
}
setName(name){
this.name = name;
}
setType(type){
this.type = type;
}
showProduct(){
console.log("name:", this.name);
console.log("type:", this.type);
}
}
class Builder{ // 抽象建造者
setPart(name, type){
throw new Error("Abstract method cannot be called");
}
getProduct(){
throw new Error("Abstract method cannot be called");
}
}
class ConcreteBuilder extends Builder{ // 实体建造者
constructor(){
super();
this.product = new Product();
}
build(name, type){
this.product.setName(name);
this.product.setType(type);
}
getProduct(){
return this.product;
}
}
class Director{ // 指挥者
constructor(){
this.builder = new ConcreteBuilder();
}
getProductA(){
this.builder.build("A", "TypeA");
return this.builder.getProduct();
}
getProductB(){
this.builder.build("B", "TypeB");
return this.builder.getProduct();
}
}
(function() {
var director = new Director();
var productA = director.getProductA();
productA.showProduct(); // name: A type: TypeA
var director = new Director();
var productB = director.getProductB();
productB.showProduct(); // name: B type: TypeB
})()
https://github.com/WindrunnerMax/EveryDay
https://www.runoob.com/design-pattern/builder-pattern.html
https://wiki.jikexueyuan.com/project/java-design-pattern/builder-pattern.html
https://design-patterns.readthedocs.io/zh_CN/latest/creational_patterns/builder.html
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。