| 名称 | Builder |
| 结构 | |
| 意图 | 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 |
| 适用性 |
|
1
// Builder
2
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
7
// For further information, read "Design Patterns", p97, Gamma et al.,
8
// Addison-Wesley, ISBN:0-201-63361-2
9
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
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
38
}
39
40
abstract class AbstractBuilder
41
{
42
abstract public void BuildPartA();
43
abstract public void BuildPartB();
44
abstract public void BuildPartC();
45
}
46
47
// These two classes could be part of an application
48
// =================================================
49
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
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
81
director.Construct(concreteBuilder);
82
83
return 0;
84
}
85
}
86
}
87
88
// Builder2

3
// Intent: "Separate the construction of a complex object from its4
// representation so that the same construction process can create5
// different representations". 6

7
// For further information, read "Design Patterns", p97, Gamma et al.,8
// Addison-Wesley, ISBN:0-201-63361-29

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 itself14
* to be reused. 15
* 16
*/17
18
namespace Builder_DesignPattern19
{20
using System;21

22
// These two classes could be part of a framework,23
// which we will call DP24
// ===============================================25
26
class Director 27
{28
public void Construct(AbstractBuilder abstractBuilder)29
{30
abstractBuilder.BuildPartA();31
if (1==1 ) //represents some local decision inside director32
{33
abstractBuilder.BuildPartB(); 34
}35
abstractBuilder.BuildPartC(); 36
}37

38
}39

40
abstract class AbstractBuilder 41
{42
abstract public void BuildPartA();43
abstract public void BuildPartB();44
abstract public void BuildPartC();45
}46

47
// These two classes could be part of an application 48
// =================================================49

50
class ConcreteBuilder : AbstractBuilder 51
{52
override public void BuildPartA()53
{54
// Create some object here known to ConcreteBuilder55
Console.WriteLine("ConcreteBuilder.BuildPartA called");56
}57
58
override public void BuildPartB()59
{60
// Create some object here known to ConcreteBuilder61
Console.WriteLine("ConcreteBuilder.BuildPartB called");62
}63
64
override public void BuildPartC()65
{66
// Create some object here known to ConcreteBuilder67
Console.WriteLine("ConcreteBuilder.BuildPartC called");68
}69
} 70

71
/// <summary>72
/// Summary description for Client.73
/// </summary>74
public class Client75
{76
public static int Main(string[] args)77
{78
ConcreteBuilder concreteBuilder = new ConcreteBuilder();79
Director director = new Director();80

81
director.Construct(concreteBuilder);82

83
return 0;84
}85
}86
}87

88


