設計模式-裝飾器模式

煮詩君發表於2020-09-03

前言

點選檢視:設計模式系列

裝飾器模式(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,資料結構。 

相關文章