1、UML类图
**简单介绍:**建造者模式可以将复杂对象的建造过程抽象出来这个抽象过程。建造者模式只需通过指定复杂对象的类型和内容就可以构建他们,用户不需要知道具体构建的细节。
2、建造者模式的四个角色
1)产品:建造的对象
2)抽象建造者:指定产品的各个部件的接口或是抽象类
3)具体建造者:实现接口,并构建各个部件
4)指挥者:控制产品的生产流程
3、代码
抽象建造者
/**
* 抽象建造者
* 用于构建产品的流程
*/
public abstract class HouseBuilder {
private House house = new House();
/* 建造流程 */
public abstract void buildBasic();
public abstract void buildWall();
public abstract void roofed();
//造好房子后通过该方法返回
public House build(){
return house;
}
}
建造者实体类
/**
* 用于具体的搭建高楼产品
*/
public class HighBuildingBuilder extends HouseBuilder{
@Override
public void buildBasic() {
System.out.println("HighBuildingBuilder---打50m地基");
}
@Override
public void buildWall() {
System.out.println("HighBuildingBuilder---砌墙高1000m");
}
@Override
public void roofed() {
System.out.println("HighBuildingBuilder---平顶");
}
}
/**
* 用于具体的搭建普通房子产品
*/
public class CommonHouseBuilder extends HouseBuilder{
@Override
public void buildBasic() {
System.out.println("CommonHouseBuilder---打5m地基");
}
@Override
public void buildWall() {
System.out.println("CommonHouseBuilder---砌墙高10m");
}
@Override
public void roofed() {
System.out.println("CommonHouseBuilder---盖斜顶");
}
}
产品类
/**
* 产品
*/
public class House {
}
指挥者类
/**
* 指挥者
* 用于聚合Builder
* 并且处理造房子的流程
*/
public class HouseDirector {
HouseBuilder houseBuilder = null;
public HouseDirector(HouseBuilder houseBuilder){
this.houseBuilder = houseBuilder;
}
public void setHouseBuilder(HouseBuilder houseBuilder) {
this.houseBuilder = houseBuilder;
}
//自定义处理造房子的流程
public House constructHouse(){
houseBuilder.buildBasic();
houseBuilder.buildWall();
houseBuilder.roofed();
return houseBuilder.build();
}
}
运行类
public class BuilderTest {
public static void main(String[] args) {
//普通房子建造者
CommonHouseBuilder commonHouseBuilder = new CommonHouseBuilder();
//指挥者准备创建房子
HouseDirector houseDirector = new HouseDirector(commonHouseBuilder);
//建好普通房子
House house = houseDirector.constructHouse();
//高楼建造者
HighBuildingBuilder highBuildingBuilder = new HighBuildingBuilder();
//换一个建造者
houseDirector.setHouseBuilder(highBuildingBuilder);
//建好高楼
House highBuilding = houseDirector.constructHouse();
}
}
运行效果
4、建造者模式和抽象工厂模式比较
抽象工厂模式实现对一系列的产品进行创建,这些产品具有不同分类维度的产品组合,采用抽象工厂模式不需要关系构建过程。而建造者模式是按照指定的蓝图建造产品,需要通过建造者获取各个配件来按指挥者指定的流程组装成产品