建造者模式

Posted by 石玉军 on 2018-07-26

引言:建造者模式可以将一个产品的内部表象与产品的生成过程分割开来,从而利用一个建筑过程生成具有不同内部表象的对象。
初次读来这句话可能晦涩难懂,待我们一点点的来剖析它,解开他的神秘面纱。先看下图:
s

Builder:抽象建造者,给出了建造接口,这里我们以造房子为例,Builder就规定了所有的建筑工人都得会铺地板、砌墙、吊天花板。

WorkBuilder1:具体的建筑实现者,我们这里称之为小王,也就是说小王满足了铺地板、砌墙、吊天花板的要求,现在他就是一个合格的建筑工人了。

Floor、Wall、Ceiling:产品,它们就是小王需要建造的对象了。

Driector:导演者,这里我们可以理解为包工头,他呢就是指挥建造者们的角色了。比如有个富豪要建一个别墅,那么他会直接找到包工头:来,给你钱,去给我来个别墅。其实这个富豪在这里是完全不知道下方的建造者小王小刘等等人是如何操作的,他只跟包工头接触

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

/**
*抽象建造者
*也可以是一个接口
*/
public abstract class Builder {
abstract void buildFloor();
abstract void buildWall();
abstract void buildCeiling();
}
/**
*小王
*/
public class WorkBuilder1 extends Builder {
@Override
void buildFloor() {
new Floor();
}

@Override
void buildWall() {
new Wall();
}

@Override
void buildCeiling() {
new Ceiling();
}
}
/**
*地板
*/
public class Floor{
}
/**
*墙
*/
public class Wall{
}
/**
*天花板
*/
public class Ceiling {
}

/**
*包工头
*/
public class Driector {
public Builder builder;
public Driector(Builder builder){
this.builder=builder;
}
public void excute(){
this.builder.buildFloor();
this.builder.buildCeiling();
this.builder.buildWall();
}
}

现在我们回过头换一种方式再来看引言,将别墅的内部组成与建筑过程分离开来,从而实现一个包工头不仅可以造别墅还能修游泳池等。

z这样的话是不是已经理解了呢