模式介绍
建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。在软件系统中,有时候面临着一个复杂对象的创建工作,其通常由各个部分的子对象构成。由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。
建造者模式与工厂模式的区别是:建造者模式更加关注零件装配的顺序。
使用场景
1、需要生成的对象具有复杂的内部结构。
2、需要生成的对象内部属性本身相互依赖。
系统实现
/**
* 房子产品
*/
public class House {
private int roofDeep;
private int roofHigh;
private int roofAres;
//setter and getter
}
/**
*房子 Builder 的抽象类
*/
public abstract class AbstarctHouseBuilder {
protected House house = new House();
public abstract AbstarctHouseBuilder buildBasic(int deep);
public abstract AbstarctHouseBuilder buildWalls(int high);
public abstract AbstarctHouseBuilder buildRoof(int ares);
public House getHouse(){
return house;
}
}
/**
*房子 Builder 的实现类
*/
public class CommenHouseBuider extends AbstarctHouseBuilder {
@Override
public AbstarctHouseBuilder buildBasic(int deep) {
System.out.println("打地基中,地基的深度:"+deep+"米");
house.setRoofDeep(deep);
return this;
}
@Override
public AbstarctHouseBuilder buildWalls(int high){
System.out.println("砌墙中,墙的高度:"+high+"米");
house.setRoofHigh(high);
return this;
}
@Override
public AbstarctHouseBuilder buildRoof(int ares){
System.out.println("建筑中,屋顶的面积:"+ares+"平法米。");
house.setRoofAres(ares);
return this;
}
}
/**
*建造房子的指挥者
*/
public class HouseDirector {
AbstarctHouseBuilder abstarctHouseBuilder = null;
public HouseDirector(AbstarctHouseBuilder abstarctHouseBuilder){
this.abstarctHouseBuilder = abstarctHouseBuilder;
}
public House constructor(){
abstarctHouseBuilder.buildBasic(5)
.buildWalls(20)
.buildRoof(150);
System.out.println("房子盖好了!");
return abstarctHouseBuilder.getHouse();
}
}
/**
*客户端
*/
public class Client {
public static void main(String args[]){
//创建普通房子 Builder
AbstarctHouseBuilder buider = new CommenHouseBuider();
HouseDirector houseDirector = new HouseDirector(buider);
houseDirector.constructor();
}
}
结果:
打地基中,地基的深度:5米
砌墙中,墙的高度:20米
建筑中,屋顶的面积:150平法米。
房子盖好了!