裝飾器模式

定義

不通過派生類增改類屬性動作,而是通過模式設計動態的達到這種效果,而且比繼承更方便靈活減少程序的複雜性。

舉例

汪峯打造冠軍團隊。

首先團隊類爲空,經過汪峯不斷的努力,爲團隊爭取學員,也爲團隊隊員打造合適的平臺,讓其發揮。

團隊不斷的變強,變完整,是由裝飾者,根據不同的需求,給基類進行增改,一致最後贏得你的贊同,滿足你的需求。

實現裝配器模式的類圖:

戰隊組建代碼

複製代碼
 //汪峯戰隊
    abstract class WangFengTeam
    {
        //執行策劃命令
        abstract public void Acrion();
    }

    //學員
    class Student : WangFengTeam
    {
        // Methods
        override public void Acrion()
        {
            Console.WriteLine("汪峯團隊學員情況:");
        }
    }

    // 戰隊總策劃
    abstract class Direct : WangFengTeam
    {
        //汪峯戰隊
        protected WangFengTeam team;

        // 策劃活動
        public void SetComponent(WangFengTeam team)
        {
            this.team = team;
        }
        //執行策劃
        override public void Acrion()
        {
            if (team != null)
            {
                team.Acrion();
            }
        }
    }

    //男孩唱狂放型的,構建一個組合。
    class BoyTeam : Direct
    {
        // 組合名稱
        public string teamName= "鋒利的Jquery";

        //具體策劃
        override public void Acrion()
        {
            base.Acrion();
            Console.WriteLine("我是汪峯團隊,狂放型的。");
        }
    }

    //女孩唱婉約型的,來個模特表演
    class GrilTeam : Direct
    {
        //具體策劃
        override public void Acrion()
        {
            base.Acrion();           

            Console.WriteLine("我是汪峯團隊,婉約型的。");

            //模特表演
            show();
        }

        public void show()
        {
            Console.WriteLine("婉約型,走秀");
        }
    }
複製代碼

客戶端代碼:

複製代碼
 public static void Main()
        {
            Student team = new Student();
            BoyTeam boy = new BoyTeam();
            GrilTeam girl = new GrilTeam();

            //團隊男孩裝飾
            boy.SetComponent(team);
            //團隊女孩裝飾
            girl.SetComponent(boy);
            girl.Acrion();
            Console.Read();
        }
複製代碼

動態擴展類功能屬性,而無需通過繼承層次結構實現,這改變啦一些繼承類的不足之處,也更方便靈活給類添加職責方式。但是裝飾器模式在使用過程中,也會給維護人員帶來煩惱,因爲他會產生許多小的對象,讓你頭痛欲裂,所以,代碼註釋,還有代碼條理一定要整理清楚,以防給後期維護人員帶來,看着蛋疼的代碼。

轉載自: http://www.cnblogs.com/knowledgesea/p/3942169.html

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