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

  1. 建造者模式

    当需要将一个复杂的对象与它的表示分离,使得同样的构建过程可以创建不同的表示时,可以使用建造者模式.如果使用建造者模式,用户只需指定需要构建的类型即可,具体建造的过程和细节就不需知道了.

  2. 模式组成(代码引用与《大话设计模式》)

    1)Buider-抽象建造者类,是为创建一个Product对象的各个部件指定的抽象接口.示例代码如下:

 abstract class Builder
    {
       public abstract void BuilderPartA();
       public abstract void BuilderPartB();
       public abstract Product GetResult();
    }

      2)ConcreteBuilder-具体建造者类,是具体建造者,实现Builder接口,构造和装配各个部件.示例代码如下:

 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接口的对象.代码如下:

  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.   适用情况及使用好处

        当创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化.

        建造者模式的好处是使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了.


你可能感兴趣的:(C#,建造者模式)