1.介绍
建造者模式又叫生成器模式,是一种对象构建模式,可以将复杂对象的建造过程过程抽离,使这个抽象过程的不同实现方法可以构造出不同属性的对象。他是一步一步创建一个复杂对象,允许用户只通过指定复杂对象的类型和内容就可以构建他们,用户不需要知道内部具体的构建细节。
2.四个角色
(1)Product(产品角色):一个具体的产品对象
(2)Builder(抽象建造者) : 创建一个Product对象的各个部件指定的接口/抽象类。只需指定建造流程
(3)ConcreBuilder(具体建造者) :实现接口,构建和装配各个部件,实现具体建造细节
(4)Director(指挥者) : 构建一个使用Builder接口的对象。它主要是用于创建一个复杂的对象,主要有两个作用,一个是隔离了客户与对象的生产过程,另一个是负责控制产品对象的生产过程。
例子
js
public class House{
private String baise;
private String wall;
private String roofed;
get()....
set()....
}
public abstract class HouseBuilder{
protected House house = new House();
public abstract void buildBasic();
public abstract void buildWalls();
public abstract void roofed();
//建造好
public House build(){
return house;
}
}
// 把制造流程和产品本身解耦
public class CommonHouse extends HouseBuilder{
// 实现具体方法
public void buildBasic(){}
public void buildWalls(){}
public void roofed(){}
}
public class HightHouse extends HouseBuilder{
// 实现具体方法
public void buildBasic(){}
public void buildWalls(){}
public void roofed(){}
}
public class HouseDirector{
HouseBuilder houseBuilder = null;
public HouseDirector(HouseBuilder houseBuilder){
this.houseBuilder = houseBuilder;
}
//指挥者处理建造房子的流程
public House constructHouse(){
houseBuilder.buildBasic();
houseBuilder.buildWalls();
houseBuilder.roofed();
return houseBuilder.build();
}
}
public classs Client{
main(){
//准备盖普通房子
CommonHouse commonHouse = new CommonHouse();
//创建房子的指挥者
HouseDirector houseDirector = new HouseDirector(commonHouse)
House house houseDirector.constructHouse();
}
}
js
let Builder = (function () {
// 决定房子入住人数
function rooms(peopleCount) {
if(peopleCount <= 0) throw new Error("入住人数异常");
this.peopleCount = peopleCount < 3 ? 2 : peopleCount
}
//决定房子面积
function setArea(area){
if(area <= 20) throw Error("房子面积过小")
this.area = area
}
//决定房子风格
function style(style){
this.style = style
}
return class{
constructor(PeopleCount,area,Style){
rooms.call(this, PeopleCount)
setArea.call(this, area);
style.call(this, Style)
}
}
})()
let bighouse = new Builder(3,100,'中式'),
smallHouse = new Builder(3,50,'欧式');