設計模式-裝飾器模式


前言

點擊查看:設計模式系列

裝飾器模式(Decorator)

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

舉例:

汪峰打造冠軍團隊。

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

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

實現裝配器模式的類圖:

戰隊組建代碼

 //汪峰戰隊
    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();
        }

裝飾器模式理解

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

希望你能運行下代碼,根據運行次序去理解每一個設計模式,多思考,多探討

歡迎加入博客左上方群,交流探討,設計模式,數據庫,c#.net,數據結構。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM