前言
建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
一、产品类
产品类,由多个部件组成,一个添加产品的方法,一个显示所有产品的方法。
1 public class Product
2 {
3 IList<string> parts = new List<string>();
4 public void Add(string part)
5 {
6 parts.Add(part);
7 }
8 public void Show()
9 {
10 Console.WriteLine("创建产品======");
11 foreach(var part in parts)
12 {
13 Console.WriteLine(part);
14 }
15 }
16 }
二、抽象建造者类
确定产品由两个部件组成,并声明一个得到产品建造后结果的方法GetResult。
1 public abstract class Builder
2 {
3 public abstract void BuildPartA();
4 public abstract void BuildPartB();
5 public abstract Product GetResult();
6 }
三、具体建造者类
具体建造类1
1 public class ConcreteBuilder1 : Builder
2 {
3 private Product p = new Product();
4 public override void BuildPartA()
5 {
6 p.Add("A");
7 }
8
9 public override void BuildPartB()
10 {
11 p.Add("B");
12 }
13
14 public override Product GetResult()
15 {
16 return p;
17 }
18 }
具体建造类2
1 public class ConcreteBuilder2 : Builder
2 {
3 private Product p = new Product();
4 public override void BuildPartA()
5 {
6 p.Add("X");
7 }
8
9 public override void BuildPartB()
10 {
11 p.Add("Y");
12 }
13
14 public override Product GetResult()
15 {
16 return p;
17 }
18 }
四、指挥者
用来指挥建造过程
1 public class Director
2 {
3 //指挥创建过程
4 public void Construct(Builder b)
5 {
6 b.BuildPartA();
7 b.BuildPartB();
8 }
9 }
五、客户端调用
1 class Program
2 {
3 static void Main(string[] args)
4 {
5 Director d = new Director();
6 Builder b1 = new ConcreteBuilder1();
7 Builder b2 = new ConcreteBuilder2();
8
9 //指挥者用ConcreteBuilder1的方法建造产品
10 d.Construct(b1);
11 Product p1 = b1.GetResult();
12 p1.Show();
13
14 //指挥者用ConcreteBuilder2的方法建造产品
15 d.Construct(b2);
16 Product p2 = b2.GetResult();
17 p2.Show();
18
19 Console.ReadKey();
20 }
21 }
总结
建造者模式是在当创建复杂对象的算法应该独立于对象的组成部分以及它们的装配方式时适用的模式。
参考书籍:大话设计模式