自由拓展你的程序-建造者模式(Builder模式)
一个复杂对象的构建与它的表示分离。使得同样的构建过程可以创建不同的表示。
使用场景
- 相同的方法,不同的执行顺序,产生不同的结果时。
- 多个零件或者部件,都可以装配到一个对象中,但是产生的运行结果又不想同时。
- 产品类非常复杂,或者产品类中的调用顺序不同产生了不同的作用,这个时候使用建造者模式就非常合适。
- 当初始化一个对象特别复杂,例如参数多,且很多参数都有默认值时
简单实现
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
//抽象类
package Builder;
public abstract class Computer {
protected String mBoard;
protected String mDisplay;
protected String mOS;
protected Computer() {
}
public void setBoard(String board){
mBoard=board;
}
//设置内存
public void setDisplay(String display){
mDisplay=display;
}
//设置操作系统
public abstract void setOS();
@Override
public String toString() {
return "Computer{" +
"mBoard='" + mBoard + '\'' +
", mDisplay='" + mDisplay + '\'' +
", mOS='" + mOS + '\'' +
'}';
}
}
//Builder类
package Builder;
public abstract class Builder {
//设置主机
public abstract void buildBoard(String board);
//设置显示器
public abstract void buildDisplay(String display);
//设置操作系统
public abstract void buildOS();
//创建computer
public abstract Computer create();
}
package Builder;
public class Director {
Builder mBuilder=null;
public Director(Builder builder){
mBuilder=builder;
}
public void construct(String board,String display){
mBuilder.buildBoard(board);
mBuilder.buildDisplay(display);
mBuilder.buildOS();
}
}
package Builder;
public class Macbook extends Computer {
public Macbook() {
}
@Override
public void setOS() {
mOS="MAC OS X 10.10";
}
}
package Builder;
public class MacbookBuilder extends Builder {
private Computer mComputer=new Macbook();
@Override
public void buildBoard(String board) {
mComputer.setBoard(board);
}
@Override
public void buildDisplay(String display) {
mComputer.setDisplay(display);
}
@Override
public void buildOS() {
mComputer.setOS();
}
@Override
public Computer create() {
return mComputer;
}
}
//测试类
package Builder;
public class Test {
public static void main(String[] args) {
Builder builder=new MacbookBuilder();
Director pcDirector=new Director(builder);
pcDirector.construct("因特尔主板","测试显示器");
System.out.println("computer info :"+builder.create().toString());
}
}
|
执行结果: