建造者模式:可以将一个产品的内部表现与产品的生成过程分割开来。从而可以使一个建造过程具有不同的内部表现的产品对象。如果我们用了建造者模式,那么用户就只需指定需要建造的类型就可以得到它们,而具体建造的过程和细节就不需要知道了
namespace 建造者模式 { class Program { static void Main(string[] args) { //创建指挥者 Director director = new Director(); //创建部件AB类 Builder b1 = new ConcreteBuilder1(); //创建部件XY类 Builder b2 = new ConcreteBuilder2(); //增加AB部件 director.Construct(b1); Product p1 = b1.GetResult(); //进行展示 p1.Show(); //增加XY部件 director.Construct(b2); Product p2 = b2.GetResult(); //进行展示 p2.Show(); Console.Read(); } } /// <summary> /// 指挥者 /// </summary> class Director { /// <summary> /// 用来指挥建造过程 /// </summary> /// <param name="builder"></param> public void Construct(Builder builder) { //建造AB部件 builder.BuildPartA(); //建造XY部件 builder.BuildPartB(); } } /// <summary> /// 抽象建造者 /// </summary> abstract class Builder { public abstract void BuildPartA(); public abstract void BuildPartB(); public abstract Product GetResult(); } /// <summary> /// 具体建造类1 /// </summary> class ConcreteBuilder1 : Builder { private Product product = new Product(); public override void BuildPartA() { product.Add("部件A"); } public override void BuildPartB() { product.Add("部件B"); } public override Product GetResult() { return product; } } /// <summary> /// 具体建造类2 /// </summary> class ConcreteBuilder2 : Builder { private Product product = new Product(); public override void BuildPartA() { product.Add("部件X"); } public override void BuildPartB() { product.Add("部件Y"); } public override Product GetResult() { return product; } } /// <summary> /// 产品类 /// </summary> class Product { IList<string> parts = new List<string>(); //增加产品部件 public void Add(string part) { parts.Add(part); } //展示产品 public void Show() { Console.WriteLine("\n产品 创建 ----"); //列出产品所有的部件 foreach (string part in parts) { Console.WriteLine(part); } } } }