概念
通过多个简单的对象一步一步构建成一个复杂的对象,如果在创建一个对象的时候,需要传递很多参数来实例化,那么使用这种模式,就可以很容易就实现对象的创建,还可以确定建造的顺序。
实现
接下来以一个简单的案例进行介绍,比如我们现在需要建造一个房子,一个房子需要有柱子,地基,墙壁,屋顶,而且这个是有先后顺序的,先建地基->柱子->墙壁->屋顶,具体实现如下:
代码实现:
定义一个屋子的类:
public class House {
//屋顶
private String roof;
//地基
private String base;
//墙壁
private String wall;
//柱子
private String pillar;
}
定义一个设计蓝图的接口:
/**
* 定义设计蓝图
*/
public interface HouseBuild {
//建造房顶
public HouseBuild buildRoot();
//建造墙壁
public HouseBuild buildWall();
//建造地基
public HouseBuild buildBase();
//建造柱子
public HouseBuild buildPillar();
//整体建造屋子
public House build();
}
工人们拿到这个蓝图,是具体建造的实施者:
/**
* 拿到设计蓝图具体实现的
*/
public class Worker implements HouseBuild {
//初始一个屋子
House house = new House();
@Override
public HouseBuild buildRoot() {
System.out.println("建造房顶");
return this;
}
@Override
public HouseBuild buildWall() {
System.out.println("建造墙壁");
return this;
}
@Override
public HouseBuild buildBase() {
System.out.println("建造地基");
return this;
}
@Override
public HouseBuild buildPillar() {
System.out.println("建造柱子");
return this;
}
@Override
public House build() {
return house;
}
}
最后进行测试:
/**
* 在实际案例中,建造屋子是有一定的顺序的是,先建地基->柱子->墙壁->屋顶
* 所以下面的代码执行顺序也要进行规范
*/
public class Main {
public static void main(String[] args) {
HouseBuild plan = new Worker();
House house = plan.buildBase().buildPillar().buildWall().buildRoot().build();
}
}
实验结果:
本文的代码:https://pan.baidu.com/s/1bvOF5PncVu2-8yYKBIhPQw
提取码:4fww