建造者模式

1、个人理解:首先我们要有一件产品,这个产品由多个部件组成;然后再有一个抽象建造者,将建造这个产品的部件都写成抽象方法,继承它的子类会去重写这些方法。最后我们要有一个指挥者类,去封装调用这些方法,也就是建造的过程。

2、定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

3.代码实现

1)product类,产品类,由多个部件构成。

 1 class Product
 2     {
 3         IList<string> parts = new List<string>();
 4 
 5         public void Add(string part)
 6         {
 7             parts.Add(part);
 8         }
 9         //列举所有的产品部件
10         public void Show()
11         { 
12            foreach(string part in parts){
13                Console.WriteLine(part);
14            }
15         }
16     }

2)抽象的建造者

1 abstract class Builder
2     {
3         //建造产品必须的两个部件
4         public abstract void BuildPartA();
5         public abstract void BuildPartB();
6 
7         public abstract Product GetResult();
8 
9     }

3)具体的建造者

 1 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     }
19     class ConcreteBuilder2 : Builder
20     {
21         private Product p = new Product();
22         public override void BuildPartA()
23         {
24             p.Add("部件X");
25         }
26 
27         public override void BuildPartB()
28         {
29             p.Add("部件Y");
30         }
31 
32         public override Product GetResult()
33         {
34             return p;
35         }
36     }

4)指挥者类,也就是用来指挥建造过程

1 class Director
2     {
3         //封装了建造的过程
4         public void Construct(Builder builder)
5         {
6             builder.BuildPartA();
7             builder.BuildPartB();
8         }
9     }

5)客户端代码

 1 static void Main(string[] args)
 2         {
 3             //创建一个指挥者
 4             Director dt = new Director();
 5             //创建具体的产品
 6             ConcreteBuilder1 cb1 = new ConcreteBuilder1();
 7             //指挥产品的建造
 8             dt.Construct(cb1);
 9             //得到产品
10             Product p1 = cb1.GetResult();
11             //展示产品的部件
12             p1.Show();
13 
14             Console.ReadKey();
15         }

 

posted @ 2017-04-21 09:40  爱生活,爱代码  阅读(220)  评论(0编辑  收藏  举报