需求:建造房子的过程为:打桩,砌墙,封顶
uml:
具体代码实现:
public class House {
private String baise;
private String wall;
private String roofed;
public House() {
}
public String getBaise() {
return this.baise;
}
public void setBaise(String baise) {
this.baise = baise;
}
public String getWall() {
return this.wall;
}
public void setWall(String wall) {
this.wall = wall;
}
public String getRoofed() {
return this.roofed;
}
public void setRoofed(String roofed) {
this.roofed = roofed;
}
}
public abstract class HouseBuilder {
protected House house = new House();
public HouseBuilder() {
}
public abstract void buildBasic();
public abstract void buildWalls();
public abstract void roofed();
public House buildHouse() {
return this.house;
}
}
public class HouseDirector {
HouseBuilder houseBuilder = null;
public HouseDirector(HouseBuilder houseBuilder) {
this.houseBuilder = houseBuilder;
}
public void setHouseBuilder(HouseBuilder houseBuilder) {
this.houseBuilder = houseBuilder;
}
public House constructHouse() {
this.houseBuilder.buildBasic();
this.houseBuilder.buildWalls();
this.houseBuilder.roofed();
return this.houseBuilder.buildHouse();
}
}
public class CommonHouse extends HouseBuilder {
public CommonHouse() {
}
public void buildBasic() {
System.out.println(" 普通房子打地基5米 ");
}
public void buildWalls() {
System.out.println(" 普通房子砌墙10cm ");
}
public void roofed() {
System.out.println(" 普通房子屋顶 ");
}
}
public class HighBuilding extends HouseBuilder {
public HighBuilding() {
}
public void buildBasic() {
System.out.println(" 高楼的打地基100米 ");
}
public void buildWalls() {
System.out.println(" 高楼的砌墙20cm ");
}
public void roofed() {
System.out.println(" 高楼的透明屋顶 ");
}
}
public class Client {
public Client() {
}
public static void main(String[] args) {
CommonHouse commonHouse = new CommonHouse();
HouseDirector houseDirector = new HouseDirector(commonHouse);
House house = houseDirector.constructHouse();
System.out.println("--------------------------");
HighBuilding highBuilding = new HighBuilding();
houseDirector.setHouseBuilder(highBuilding);
houseDirector.constructHouse();
}
}