百度百科
https://baike.baidu.com/item/%E5%BB%BA%E9%80%A0%E8%80%85%E6%A8%A1%E5%BC%8F/3229729
基本介紹
四個角色
原理類圖
本文事例UML圖
product:
// 産品
public class House {
private String baise;
private String wall;
private String roofed;
public String getBaise() {
return baise;
}
public void setBaise(String baise) {
this.baise = baise;
}
public String getWall() {
return wall;
}
public void setWall(String wall) {
this.wall = wall;
}
public String getRoofed() {
return roofed;
}
public void setRoofed(String roofed) {
this.roofed = roofed;
}
}
抽象創造者
// 抽象的建造者
public abstract class HouseBuilder {
protected House house = new House(); // 組合産品房子
// 将建造的流程寫好,抽象的方法
public abstract void buildBasic();
public abstract void buildWalls();
public abstract void roofed();
public House buildHouse() {
return house;
}
}
指揮者:
//指揮者,制作流程,傳回産品
public class HouseDirector {
HouseBuilder houseBuilder = null;
public HouseDirector(HouseBuilder houseBuilder) {
this.houseBuilder = houseBuilder;
}
public HouseBuilder getHouseBuilder() {
return houseBuilder;
}
public void setHouseBuilder(HouseBuilder houseBuilder) {
this.houseBuilder = houseBuilder;
}
//處理建造房子的流程,業務邏輯 ,交給指揮者
public House constructHouse() {
houseBuilder.buildBasic();
houseBuilder.buildWalls();
houseBuilder.roofed();
return houseBuilder.buildHouse();
}
}
具體建立者,比如高樓和矮樓:
package builder;
public class CommonHouse extends HouseBuilder {
@Override
public void buildBasic() {
System.out.println("普通房子打地基6米");
}
@Override
public void buildWalls() {
System.out.println("普通房子砌牆10米");
}
@Override
public void roofed() {
System.out.println("普通房子正常封頂");
}
}
package builder;
public class HighBuilding extends HouseBuilder {
@Override
public void buildBasic() {
System.out.println("高樓大廈打地基50米");
}
@Override
public void buildWalls() {
System.out.println("高樓大廈砌牆100米");
}
@Override
public void roofed() {
System.out.println("高樓大廈透明封頂");
}
}
測試結果:
JDK源碼:
建立者模式的注意事項和細節