建筑模式
名称 | Builder |
结构 | ![]() |
意图 | 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 |
适用性 |
|
1
// Builder
2![](/Images/OutliningIndicators/None.gif)
3
// Intent: "Separate the construction of a complex object from its
4
// representation so that the same construction process can create
5
// different representations".
6![](/Images/OutliningIndicators/None.gif)
7
// For further information, read "Design Patterns", p97, Gamma et al.,
8
// Addison-Wesley, ISBN:0-201-63361-2
9![](/Images/OutliningIndicators/None.gif)
10
/* Notes:
11
* Builder is an object creational design pattern that codifies the
12
* construction process outside of the actual steps that carries out
13
* the construction - thus allowing the construction process itself
14
* to be reused.
15
*
16
*/
17
18
namespace Builder_DesignPattern
19
{
20
using System;
21![](/Images/OutliningIndicators/InBlock.gif)
22
// These two classes could be part of a framework,
23
// which we will call DP
24
// ===============================================
25
26
class Director
27
{
28
public void Construct(AbstractBuilder abstractBuilder)
29
{
30
abstractBuilder.BuildPartA();
31
if (1==1 ) //represents some local decision inside director
32
{
33
abstractBuilder.BuildPartB();
34
}
35
abstractBuilder.BuildPartC();
36
}
37![](/Images/OutliningIndicators/InBlock.gif)
38
}
39![](/Images/OutliningIndicators/InBlock.gif)
40
abstract class AbstractBuilder
41
{
42
abstract public void BuildPartA();
43
abstract public void BuildPartB();
44
abstract public void BuildPartC();
45
}
46![](/Images/OutliningIndicators/InBlock.gif)
47
// These two classes could be part of an application
48
// =================================================
49![](/Images/OutliningIndicators/InBlock.gif)
50
class ConcreteBuilder : AbstractBuilder
51
{
52
override public void BuildPartA()
53
{
54
// Create some object here known to ConcreteBuilder
55
Console.WriteLine("ConcreteBuilder.BuildPartA called");
56
}
57
58
override public void BuildPartB()
59
{
60
// Create some object here known to ConcreteBuilder
61
Console.WriteLine("ConcreteBuilder.BuildPartB called");
62
}
63
64
override public void BuildPartC()
65
{
66
// Create some object here known to ConcreteBuilder
67
Console.WriteLine("ConcreteBuilder.BuildPartC called");
68
}
69
}
70![](/Images/OutliningIndicators/InBlock.gif)
71
/// <summary>
72
/// Summary description for Client.
73
/// </summary>
74
public class Client
75
{
76
public static int Main(string[] args)
77
{
78
ConcreteBuilder concreteBuilder = new ConcreteBuilder();
79
Director director = new Director();
80![](/Images/OutliningIndicators/InBlock.gif)
81
director.Construct(concreteBuilder);
82![](/Images/OutliningIndicators/InBlock.gif)
83
return 0;
84
}
85
}
86
}
87![](/Images/OutliningIndicators/None.gif)
88![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/None.gif)
5
![](/Images/OutliningIndicators/None.gif)
6
![](/Images/OutliningIndicators/None.gif)
7
![](/Images/OutliningIndicators/None.gif)
8
![](/Images/OutliningIndicators/None.gif)
9
![](/Images/OutliningIndicators/None.gif)
10
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/InBlock.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/InBlock.gif)
15
![](/Images/OutliningIndicators/InBlock.gif)
16
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
17
![](/Images/OutliningIndicators/None.gif)
18
![](/Images/OutliningIndicators/None.gif)
19
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
20
![](/Images/OutliningIndicators/InBlock.gif)
21
![](/Images/OutliningIndicators/InBlock.gif)
22
![](/Images/OutliningIndicators/InBlock.gif)
23
![](/Images/OutliningIndicators/InBlock.gif)
24
![](/Images/OutliningIndicators/InBlock.gif)
25
![](/Images/OutliningIndicators/InBlock.gif)
26
![](/Images/OutliningIndicators/InBlock.gif)
27
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
28
![](/Images/OutliningIndicators/InBlock.gif)
29
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
30
![](/Images/OutliningIndicators/InBlock.gif)
31
![](/Images/OutliningIndicators/InBlock.gif)
32
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
33
![](/Images/OutliningIndicators/InBlock.gif)
34
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
35
![](/Images/OutliningIndicators/InBlock.gif)
36
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
37
![](/Images/OutliningIndicators/InBlock.gif)
38
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
39
![](/Images/OutliningIndicators/InBlock.gif)
40
![](/Images/OutliningIndicators/InBlock.gif)
41
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
42
![](/Images/OutliningIndicators/InBlock.gif)
43
![](/Images/OutliningIndicators/InBlock.gif)
44
![](/Images/OutliningIndicators/InBlock.gif)
45
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
46
![](/Images/OutliningIndicators/InBlock.gif)
47
![](/Images/OutliningIndicators/InBlock.gif)
48
![](/Images/OutliningIndicators/InBlock.gif)
49
![](/Images/OutliningIndicators/InBlock.gif)
50
![](/Images/OutliningIndicators/InBlock.gif)
51
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
52
![](/Images/OutliningIndicators/InBlock.gif)
53
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
54
![](/Images/OutliningIndicators/InBlock.gif)
55
![](/Images/OutliningIndicators/InBlock.gif)
56
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
57
![](/Images/OutliningIndicators/InBlock.gif)
58
![](/Images/OutliningIndicators/InBlock.gif)
59
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
60
![](/Images/OutliningIndicators/InBlock.gif)
61
![](/Images/OutliningIndicators/InBlock.gif)
62
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
63
![](/Images/OutliningIndicators/InBlock.gif)
64
![](/Images/OutliningIndicators/InBlock.gif)
65
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
66
![](/Images/OutliningIndicators/InBlock.gif)
67
![](/Images/OutliningIndicators/InBlock.gif)
68
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
69
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
70
![](/Images/OutliningIndicators/InBlock.gif)
71
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
72
![](/Images/OutliningIndicators/InBlock.gif)
73
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
74
![](/Images/OutliningIndicators/InBlock.gif)
75
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
76
![](/Images/OutliningIndicators/InBlock.gif)
77
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
78
![](/Images/OutliningIndicators/InBlock.gif)
79
![](/Images/OutliningIndicators/InBlock.gif)
80
![](/Images/OutliningIndicators/InBlock.gif)
81
![](/Images/OutliningIndicators/InBlock.gif)
82
![](/Images/OutliningIndicators/InBlock.gif)
83
![](/Images/OutliningIndicators/InBlock.gif)
84
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
85
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
86
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
87
![](/Images/OutliningIndicators/None.gif)
88
![](/Images/OutliningIndicators/None.gif)