2016.12.23 學習日記-建造者模式

這周也算是完成任務學習了五個模式,週末繼續對本週學習的模式進行練習掌握,考完大物壓力少了很多~最後一週上課了,假期即將到來,wow~~今天學習建造者模式。


建造者模式(Builder)

定義:將一個複雜對象的構造與它的表示分離,使同樣的構建過程可以創建不同的表示,這樣的設計模式被稱爲建造者模式

角色:

Builder:爲創建一個對象的各個部件指定的抽象接口

ConcreteBuilder:具體建造者,實現Builder接口,構造和裝配各個部件。

Product:具體的產品角色

Director:構建一個使用Builder接口的對象

UML類圖:

應用場景:

主要應用於創建一些複雜的對象,這些對象內部構件間的建造順序通常是穩定的,但對象內部的構造通常面臨着複雜的變化。

創建的複雜對象的算法,獨立於該對象的組成部分,也獨立於組成部分的裝配方法時。


優點:

客戶端不必知道產品內部組成的細節。

具體的建造者類之間是相互獨立的,對系統的擴展非常有利。

由於具體的建造者是獨立的,因此可以對建造過程逐步細化,而不對其他的模塊產生任何影響

由於建造者隱藏了該產品是如何組裝的,所以若需要改變一個產品的內部表示,只需要在定義一個具體的建造者就可以了。


實例代碼:

Builder.cs

abstract class Builder
    {
        public abstract void BuildPartA();
        public abstract void BuildPartB();
        public abstract Product GetResult();
    }

ConcreteBuilderA.cs

class ConcreteBuilderA : Builder
    {
        private Product product=new Product();

        public override void BuildPartA()
        {
            product.Add("部件A!---------------");
        }

        public override void BuildPartB()
        {
            product.Add("部件B!---------------");
        }

        public override Product GetResult()
        {
            return product;
        }
    }

ConcreteBuilderB.cs

class ConcreteBuilderB : Builder
    {
        private Product product=new Product();

        public override void BuildPartA()
        {
            product.Add("部件X!---------------");
        }

        public override void BuildPartB()
        {
            product.Add("部件Y!---------------");
        }

        public override Product GetResult()
        {
            return product;
        }
    }

Director.cs

class Director
    {
        public void Construct(Builder builder)
        {
            builder.BuildPartA();
            builder.BuildPartB();
        }
    }

Product.cs

class Product
    {
        IList<string> parts = new List<string>();

        public void Add(string part)
        {
            parts.Add(part);
        }
        public void show()
        {
            foreach (string part in parts)
            {
                Console.WriteLine(part);
            }
        }
    }

Program.cs

class Program
    {
        static void Main(string[] args)
        {
            Director director = new Director();
            Builder b1 = new ConcreteBuilderA();
            Builder b2 = new ConcreteBuilderB();

            director.Construct(b1);
            Product p1 = b1.GetResult();
            p1.show();
            Console.WriteLine("------------------------------------------");
            director.Construct(b2);
            p1 = b2.GetResult();
            p1.show();

            Console.ReadKey();
        }
    }



發佈了36 篇原創文章 · 獲贊 2 · 訪問量 9987
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章