盖房子:
盖房子:地基,墙,顶
房子类型:别墅,高楼
建造者角色:
Product:具体的产品对象
Builder:建造流程 接口/抽象类
ConcreteBuilder:具体的建造者,实现类
Director:指挥者
Product:具体的产品对象
public class House {
private String base;
private String wall;
private String roof;
}
Builder:建造流程 接口/抽象类
public abstract class HouseBuilder {
House house = new House();
public abstract void buildBasic();
public abstract void buildWall();
public abstract void roof();
House createHouse() {
return house;
}
}
ConcreteBuilder:具体的建造者,实现类
普通房子如下;别墅类似
public class CommonHouse extends HouseBuilder{
@Override
public void buildBasic() {
System.out.println("CommonHouse buildBasic---");
}
@Override
public void buildWall() {
System.out.println("CommonHouse buildWall---");
}
@Override
public void roof() {
System.out.println("CommonHouse roof---");
}
}
Director:指挥者
public class HouseDirector {
HouseBuilder houseBuilder;
public HouseDirector(HouseBuilder houseBuilder) {
this.houseBuilder = houseBuilder;
}
House constructHouse(){
houseBuilder.buildBasic();
houseBuilder.buildWall();
houseBuilder.roof();
return houseBuilder.createHouse();
}
}
测试类
public class BuildClient {
public static void main(String[] args) {
CommonHouse commonHouse = new CommonHouse();
HouseDirector houseDirector = new HouseDirector(commonHouse);
House house = houseDirector.constructHouse();
}
}
JDK 中的应用
StringBuilder,
StringBuilder既是指挥者Director,又是具体的建设者ConcreteBuilder
Builder:建造流程 接口/抽象类
AbstractStringBuilder
Appendable对外暴漏append方法
Appendable对外提供append方法