建造者模式
c#
当须要将一个复杂的对象与它的表示分离,使得一样的构建过程能够建立不一样的表示时,能够使用建造者模式.若是使用建造者模式,用户只需指定须要构建的类型便可,具体建造的过程和细节就不需知道了.设计模式
模式组成(代码引用与《大话设计模式》)ide
1)Buider-抽象建造者类,是为建立一个Product对象的各个部件指定的抽象接口.示例代码以下:ui
abstract class Builder { public abstract void BuilderPartA(); public abstract void BuilderPartB(); public abstract Product GetResult(); }
2)ConcreteBuilder-具体建造者类,是具体建造者,实现Builder接口,构造和装配各个部件.示例代码以下:
spa
class ConcreteBuilder1:Builder { private Product product = new Product(); public override void BuilderPartA() { product.Add("部件A"); } public override void BuilderPartB() { product.Add("部件B"); } public override Product GetResult() { return product; } }
class ConcreteBuilder2:Builder { private Product product = new Product(); public override void BuilderPartA() { product.Add("部件X"); } public override void BuilderPartB() { product.Add("部件Y"); } public override Product GetResult() { return product; } }
3)Product类-产品类,指具体的产品.代码以下:
设计
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); } } }
4)Director-指挥者类,是构建一个使用Builder接口的对象.代码以下:
code
class Director { public void Construct(Builder builder) { builder.BuilderPartA(); builder.BuilderPartB(); } }
5)客户端代码以下:
对象
class Program { static void Main(string[] args) { Director director = new Director(); Builder b1 = new ConcreteBuilder1(); Builder b2 = new ConcreteBuilder2(); director.Construct(b1); Product p1 = b1.GetResult(); p1.Show(); director.Construct(b2); Product p2 = b2.GetResult(); p2.Show(); Console.Read(); } }
3. 适用状况及使用好处接口
当建立一些复杂的对象,这些对象内部构建间的建造顺序一般是稳定的,但对象内部的构建一般面临着复杂的变化.
string
建造者模式的好处是使得建造代码与表示代码分离,因为建造者隐藏了该产品是如何组装的,因此若须要改变一个产品的内部表示,只须要再定义一个具体的建造者就能够了.