文章出處

返回目錄

建造者模式是我的"設計模式"里創建型模式里的最后一篇,這種模式在實現中,很多架構都用到了,如MVC,MVP,MVVM,它們都是有建造者模式的精髓的,即,創建與表現分享,我們的MVC何嘗不是,我們的MVVM又何嘗不是呢,我們做軟件的,換膚是常有的事,其實換膚的實現不就是建造者模式最好的體現嗎,呵呵.

定義

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

何時能用到它?

1 當創建復雜對象的算法應該獨立于該對象的組成部分以及它們的裝配方式時。
2 當構造過程必須允許被構造的對象有不同表示時。

建造者模式的結構圖

建造者模式實現說明

1 Person:為一個主對象,它可能很大,很復雜。
2 Man:為Person下的一個分支,一個子類,本例中指男人對象
3 PersonDirector:為建造者模式中的指導者,它決定的創建產品的過程,順序
4 PersonBuilder:實現建造過程所需要的行為接口,PersonDirector中會用到它

5 ManBuilder:這是一個具體的執行者,它可能有多個,每個執行者負責自己的部分

建造者模式的C#實現

  public class Person
    {
        public string Name { get; set; }
        public short Gander { get; set; }
        public String Head { get; set; }
        public String Body { get; set; }
        public String Foot { get; set; }
        public void SetHead(string content) { Console.WriteLine(content); Head = content; }
        public void SetBody(string content) { Console.WriteLine(content); Body = content; }
        public void SetFoot(string content) { Console.WriteLine(content); Foot = content; }
        public override string ToString()
        {
            return string.Format("Head={0},Body={1},Foot={2}", Head, Body, Foot);
        }
    }
    public class Man : Person
    {
        public Man()
        {
            this.Gander = 1;
        }
    }
    public interface PersonBuilder
    {
        void buildHead();
        void buildBody();
        void buildFoot();
        Person buildPerson();
    }
    public class PersonDirector
    {
        public Person constructPerson(PersonBuilder pb)
        {
            pb.buildHead();
            pb.buildBody();
            pb.buildFoot();
            return pb.buildPerson();
        }
    }
    public class ManBuilder : PersonBuilder
    {
        Person person;
        public ManBuilder()
        {
            person = new Man();
        }
        public void buildBody()
        {
            person.SetBody("建造男人的身體");
        }
        public void buildFoot()
        {
            person.SetFoot("建造男人的腳");
        }
        public void buildHead()
        {
            person.SetHead("建造男人的頭");
        }
        public Person buildPerson()
        {
            return person;
        }
 
    }
}

下面是調用程序

    PersonDirector pd = new PersonDirector();
    Person person = pd.constructPerson(new ManBuilder());
    Console.WriteLine(person.ToString());

程序截圖

返回目錄


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()