建造者模式
引言
前两天家里的新房要买一些家电了,老爸叫我去买空调和冰箱。
正文
建造者模式就是将一个复杂的对象的构建和表现相分离,即该对象的构建过程中有不同的表现。
核心思想
建造者模式其实是创建出一个复杂的对象,该对象由多个复杂的产品组成,对象的表现是一样的,但采用的产品可能是不一样的。
代码实现
//产品
public class House {
private String mFridge;
private String mAirCondition;
public void setFridge(String fridge) {
mFridge = fridge;
}
public void setAirCondition(String airCondition) {
mAirCondition = airCondition;
}
//这里展示房子的特性
public void show() {
System.out.println("家里新买了" + mFridge + "和" + mAirCondition);
}
}
//抽象建造者
abstract class Builder {
protected House house = new House();
public abstract void buildFridge();
public abstract void buildAirCondition();
public House getHouse() {
return house;
}
}
//具体建造者
public class HouseBuilder extends Builder {
@Override
public void buildFridge() {
house.setFridge("西门子冰箱");
}
@Override
public void buildAirCondition() {
house.setAirCondition("三菱空调");
}
}
//指挥者
public class HouseDirector {
private Builder builder ;
public HouseDirector(Builder builder) {
this.builder = builder;
}
public House construct() {
builder.buildFridge();
builder.buildAirCondition();
return builder.getHouse();
}
}
//调用
public class Main {
public static void main(String[] args) {
Builder builder = new HouseBuilder();
HouseDirector houseDirector = new HouseDirector(builder);
House house = houseDirector.construct();
house.show();
}
}
输出结果
家里新买了西门子冰箱和三菱空调
解释
在本文中,由于新房需要家电,此时新房充当了产品这一角色。老爸叫我去买冰箱和空调,此时老爸是指挥者,我则是具体建造者。
总结
建造者模式看似和工厂模式有点类似,但建造者模式更注重其产品部件的组装过程,工厂模式更注重创建过程。
建造者模式的对象相对复杂,其由多个部分构成,各个部分又会经常发生变化,但总的构建是相对稳定的。
建造者模式的构建和表现过程是独立的。
标准的建造者模式包含产品、抽象建造者、具体建造者以及指挥者。但如果只有一种产品时只需要一个建造者,此时可以略去抽象建造者。更甚指挥者有时也可以略去。