0%

设计模式-建造者模式

使用多个简单的对象一步一步构建成一个复杂的对象
将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示

示例

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
//产品
class Product
{
IList<string> parts = new List<string>();
public void Add(string part)
{
parts.Add(part);
}
public void Show()
{
Console.WriteLine("产品创建--");
parts.Foreach(p => Console.WriteLine(p));
}
}

//建造者--抽象
abstract class Builder
{
public abstract void BuildPartA();
public abstract void BuildPartB();
public abstract Product GetResult();
}
//建造者--具体
class ConcreateBuilder1 : Builder
{
private Product product = new Product();
public override void BuildPartA()
{
product.Add("Part A");
}
public override void BuildPartB()
{
product.Add("Part B");
}
public override void GetResult()
{
return product;
}
}
class ConcreateBuilder2 : Builder
{
private Product product = new Product();
public override void BuildPartA()
{
product.Add("Part X");
}
public override void BuildPartB()
{
product.Add("Part Y");
}
public override void GetResult()
{
return product;
}
}
//指挥者
class Director
{
public void Construct(Builder builder)
{
builder.BuildPartA();
builder.BuildPartB();
}
}
//Client
Director director = new Director();
Builder b1 = new ConcreateBuilder1();
Builder b2 = new ConcreateBuilder2();

director.Construct(b1);
Product p1 = b1.GetResult();
p1.Show();

director.Construct(b2);
Product p2 = b2.GetResult();
p2.Show();

建造者与外观模式对比

建造者的目的是希望用同样的生产过程,根据不同的生产者得到不同的产品。需要重写
外观模式则是将多个对象组合起来,它不需要生产者,也不需要得到不同的结果。不需要重写