C#设计模式之建造者模式(Builder Mode)

  1. 建造者模式
    c#

    当须要将一个复杂的对象与它的表示分离,使得一样的构建过程能够建立不一样的表示时,能够使用建造者模式.若是使用建造者模式,用户只需指定须要构建的类型便可,具体建造的过程和细节就不需知道了.设计模式

  2. 模式组成(代码引用与《大话设计模式》)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

        建造者模式的好处是使得建造代码与表示代码分离,因为建造者隐藏了该产品是如何组装的,因此若须要改变一个产品的内部表示,只须要再定义一个具体的建造者就能够了.

相关文章
相关标签/搜索