建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
模式角色与模式:
建造者模式可以将一个产品的内部表象与产品的生产过程分割开来,从而可以是一个建造过程生成具有不同的内部表象的产品对象。
示例代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace CSharp.DesignPattern.BuilderPattern { class Program { static void Main(string[] args) { Director director = new Director(); IBuilder b1 = new ConcreteBuilder1(); IBuilder b2 = new ConcreteBuilder2(); Product p1; Product p2; director.Construct(b1); p1 = b1.GetResult(); director.Construct(b2); p2 = b2.GetResult(); p1.Display(); p2.Display(); Console.ReadLine(); } } // 指挥者 class Director { public void Construct(IBuilder builder) { builder.BuildPartA(); builder.BuildPartB(); } } // 抽象建造者 interface IBuilder { void BuildPartA(); void BuildPartB(); Product GetResult(); } // 具体建造者 class ConcreteBuilder1 : IBuilder { private Product product; public void BuildPartA() { product = new Product(); product.Add("PartA"); } public void BuildPartB() { product.Add("PartB"); } public Product GetResult() { return product; } } // 具体建造者 class ConcreteBuilder2 : IBuilder { private Product product; public void BuildPartA() { product = new Product(); product.Add("PartX"); } public void BuildPartB() { product.Add("PartY"); } public Product GetResult() { return product; } } class Product { List<String> parts = new List<String>(); public void Add(String part) { parts.Add(part); } public void Display() { Console.WriteLine("Display result:"); foreach (String obj in parts) { Console.WriteLine(obj); } } } }