建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式
建造者模式中的角色
抽象建造者:给出一个抽象接口,定义了需要进行的工作,就像指导手册一样
具体建造者:具体的建造者完成抽象方法,返回对象
设计者(指导者):所有提出的需求在设计者这个类里面都能找得到
产品:制造出来的产品
使用场景
- 需要生成的对象具有复杂的内部结构
- 需要生成的对象内部属性本身相互依赖
与工厂模式的区别:建造者模式更加关注与零件装配的顺序
实例说明
以建造一个房子为例
抽象建造者1
2
3
4
5public interface Build {
public void makeWindow();
public void makeFloor();
public Room getRoom();
}
具体建造者1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19public class WorkBuilder implements Build{
private Room room=new Room();
public void makeWindow() {
room.setFloor("地板");
}
public void makeFloor() {
room.setWindow("窗户");
}
public Room getRoom() {
return room;
}
}
设计者1
2
3
4
5
6
7public class Designer {
public void order(Build build) {
build.makeFloor();
build.makeWindow();
}
}
产品1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26public class Room {
private String window;
private String floor;
public String getWindow() {
return window;
}
public void setWindow(String window) {
this.window = window;
}
public String getFloor() {
return floor;
}
public void setFloor(String floor) {
this.floor = floor;
}
public String toString() {
return "floor: " + floor + ", window: " + window;
}
}
测试类1
2
3
4
5
6
7
8public class Client {
public static void main(String[] args) {
Build worker = new WorkBuilder(); //获取工人对象
Designer designer = new Designer(); //获取设计师对象
designer.order(worker); //设计师指挥工人工作
System.out.println(worker.getRoom()); //工人交房
}
}
建造者模式的常用方式
在建造者模式中,在实际运用的时候往往会省略掉设计者这个角色
其主要是考虑到不向外暴露太多实现细节
使用链式构建,使得对外隐藏所有细节,这也是build采用的设计思想1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16public class Room {
private String window;
private String floor;
public void apply(WorkBuilder.RoomParmas parmas)
{
window=parmas.window;
floor=parmas.floor;
}
public String toString() {
return "floor: " + floor + ", window: " + window;
}
}
1 | public class WorkBuilder{ |
1 | public class Client { |