建造者模式
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 }