建造者模式
介绍
我们可以把建造者模式看成新建一栋房屋。房屋有打地基,建墙,装电线,盖屋顶等过程。但是如果建房是一个类,我们把建房和建房的过程放在一起就会产生耦合。
建造者模式就是减低产品和制造产品过程之间的耦合。
建造者模式的四个角色。
- Product(产品角色):一个具体产品对象。
- Builder(抽象建造者):创建一个Product对象的各个部件指定接口/抽象类,主要作用是指定建造的流程。
- ConcreBuilder (具体建造者):实现接口,构建和装配各个部件。实现产品的细节
- Director(指挥者):构建一个使用Builder接口对象。主要适用于创建一个复杂对象。隔离了客户域对象的生产过程,并且负责控制产品对象的生产过程。
- 使用在差异性不大产品中。
案例
product
package builder;
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;
}
}
iBulider
package builder;
//抽象的建造者
public abstract class HouseBuilder {
protected House house = new House();
//将建造者的流程写好,抽象的方法
public abstract void builderbasic();
public abstract void builderwalls();
public abstract void roofed();
//建好房子后将产品返回
public House buildHouse(){
return house;
}
}
ConcreBuilder
package builder;
//具体实现类
public class CommonHouse extends HouseBuilder{
@Override
public void builderbasic() {
System.out.println("普通房子建立地基");
}
@Override
public void builderwalls() {
System.out.println("普通房子建立墙面");
}
@Override
public void roofed() {
System.out.println("普通房子建立屋顶");
}
}
Director
package builder;
//指挥者动态的指定制作流程
public class HouseDirect {
HouseBuilder houseBuilder = null;
public HouseDirect(HouseBuilder houseBuilder) {
this.houseBuilder = houseBuilder;
}
public void setHouseBuilder(HouseBuilder houseBuilder) {
this.houseBuilder = houseBuilder;
}
public House constructHouse(){
houseBuilder.builderbasic();
houseBuilder.builderwalls();
houseBuilder.roofed();
return houseBuilder.buildHouse();
}
}
main
package builder;
public class BuilderMain {
//建造者模式
public static void main(String[] args) {
CommonHouse commonHouse = new CommonHouse();
HouseDirect houseDirect = new HouseDirect(commonHouse);
House house = houseDirect.constructHouse();
}
}