1 using System;
2
3 // These two classes could be part of a framework,
4 // which we will call DP
5 // ===============================================
6
7 class Director
8 {
9 public void Construct(AbstractBuilder abstractBuilder)
10 {
11 abstractBuilder.BuildPartA();
12 if (1==1 ) //represents some local decision inside director
13 {
14 abstractBuilder.BuildPartB();
15 }
16 abstractBuilder.BuildPartC();
17 }
18
19 }
20
21 abstract class AbstractBuilder
22 {
23 abstract public void BuildPartA();
24 abstract public void BuildPartB();
25 abstract public void BuildPartC();
26 }
27
28 // These two classes could be part of an application
29 // =================================================
30
31 class ConcreteBuilder : AbstractBuilder
32 {
33 override public void BuildPartA()
34 {
35 // Create some object here known to ConcreteBuilder
36 Console.WriteLine("ConcreteBuilder.BuildPartA called");
37 }
38
39 override public void BuildPartB()
40 {
41 // Create some object here known to ConcreteBuilder
42 Console.WriteLine("ConcreteBuilder.BuildPartB called");
43 }
44
45 override public void BuildPartC()
46 {
47 // Create some object here known to ConcreteBuilder
48 Console.WriteLine("ConcreteBuilder.BuildPartC called");
49 }
50 }
51
52 /// <summary>
53 /// Summary description for Client.
54 /// </summary>
55 public class Client
56 {
57 public static int Main(string[] args)
58 {
59 ConcreteBuilder concreteBuilder = new ConcreteBuilder();
60 Director director = new Director();
61
62 director.Construct(concreteBuilder);
63
64 return 0;
65 }
66 }