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

        建造者模式的好處是使得建造代碼與表示代碼分離,因爲建造者隱藏了該產品是如何組裝的,因此若須要改變一個產品的內部表示,只須要再定義一個具體的建造者就能夠了.

相關文章
相關標籤/搜索