/***
* @author shaofan
* @Description 传统方法解决盖房问题
*/
public class BuildHouse {
public static void main(String[] args) {
AbstractHouse house = new CommonHouse();
house.build();
}
}
/***
* 房子抽象
*/
abstract class AbstractHouse{
/**
* 盖房过程,模板模式
*/
void build(){
buildBasic();
buildWall();
roofed();
}
abstract void buildBasic();
abstract void buildWall();
abstract void roofed();
}
/***
* 普通房子
*/
class CommonHouse extends AbstractHouse{
@Override
void buildBasic() {
System.out.println("普通房子打地基");
}
@Override
void buildWall() {
System.out.println("普通房子砌墙");
}
@Override
void roofed() {
System.out.println("普通房子封顶");
}
}
/***
* @author shaofan
* @Description 建造者模式解决盖房问题
*/
public class BuildHouse {
public static void main(String[] args) {
CommonBuilder commonBuilder = new CommonBuilder();
Director director = new Director(commonBuilder);
House house = director.build();
}
}
class House{
}
/***
* 建造者抽象
*/
abstract class Builder{
protected House house = new House();
abstract void buildBasic();
abstract void buildWall();
abstract void roofed();
public House buildHouse(){
return house;
}
}
/***
* 普通房屋建造者
*/
class CommonBuilder extends Builder{
@Override
void buildBasic() {
System.out.println("common build basic");
}
@Override
void buildWall() {
System.out.println("common build wall");
}
@Override
void roofed() {
System.out.println("common roofed");
}
}
/***
* 高楼建造者
*/
class HighBuilder extends Builder{
@Override
void buildBasic() {
System.out.println("high build basic");
}
@Override
void buildWall() {
System.out.println("high build wall");
}
@Override
void roofed() {
System.out.println("high roofed");
}
}
/***
* 指挥者,负责组合各个建造流程
*/
class Director{
private Builder houseBuilder;
public Director(Builder houseBuilder){
this.houseBuilder = houseBuilder;
}
public void setHouseBuilder(Builder houseBuilder){
this.houseBuilder = houseBuilder;
}
public House build(){
houseBuilder.buildBasic();
houseBuilder.buildWall();
houseBuilder.roofed();
return houseBuilder.buildHouse();
}
}
在jdk中java.lang.StringBuilder就是用了建造者模式

