建造者模式,可以简单理解为盖房子,传统上客户自己盖房子,如:
房子的实体类
package singleton;
public class Builder {
private String flood;
private String wall;
public String getFlood() {
return flood;
}
public void setFlood(String flood) {
this.flood = flood;
}
public String getWall() {
return wall;
}
public void setWall(String wall) {
this.wall = wall;
}
@Override
public String toString() {
return "Builder [flood=" + flood + ", wall=" + wall + "]";
}
}
客户盖房子:
package singleton;
import java.util.ArrayList;
public class MainClass {
public static void main(String[] args) {
Builder builder = new Builder();
builder.setFlood("房子的——————地板");
builder.setWall("房子——————的墙");
System.out.println(builder);
Builder builder2 = new Builder();
builder2.setFlood("房子2的——————地板");
builder2.setWall("房子2——————的墙");
System.out.println(builder2);
}
}
Builder [flood=房子的——————地板, wall=房子——————的墙]
Builder [flood=房子2的——————地板, wall=房子2——————的墙]
而建造者模式,则是,客户将盖房子的事交给工程师,工程师再根据要盖什么样的房子,用相应的施工队盖,如客户需要盖平房和别墅,则代码可以优化如下:
需要一个工程队,定义为借口,因为有多种工程队,工程队负责具体盖的过程,并返回房子。
package singleton;
public interface GongChengDui {
void makeFlood();
void makeWall();
Builder getBuilder();
}
需要一个工程师,客户只需指定一个工程队给工程师,工程师负责调用工程队工作
package singleton;
public class GongChengShi {
public static Builder doMake(GongChengDui gongChengDui) {
gongChengDui.makeFlood();
gongChengDui.makeWall();
return gongChengDui.getBuilder();
}
}
具体的工程队,平房工程队和别墅工程队
package singleton;
public class PingFangBuilder implements GongChengDui {
private Builder builder=new Builder();
@Override
public void makeFlood() {
builder.setFlood("平房的————地板");
}
@Override
public void makeWall() {
builder.setWall("平房的——————墙");
}
@Override
public Builder getBuilder() {
return this.builder;
}
}
package singleton;
public class BieSuBuilder implements GongChengDui {
private Builder builder=new Builder();
@Override
public void makeFlood() {
builder.setFlood("别墅的————地板");
}
@Override
public void makeWall() {
builder.setWall("别墅的——————墙");
}
@Override
public Builder getBuilder() {
return this.builder;
}
}
客户就可以不需要去盖房,而是交给了工程师
package singleton;
import java.util.ArrayList;
public class MainClass {
public static void main(String[] args) {
//客户需要盖什么房子就给工程师相应的工程队
GongChengDui gongChengDui = new PingFangBuilder();
//GongChengDui gongChengDui = new BieSuBuilder();
Builder builder = GongChengShi.doMake(gongChengDui);
System.out.println(builder);
}
}
这样的好处就是以后要盖其它的房子,只需增加对应的工程队,即可。