head first (三):裝飾者模式

來源:互聯網
上載者:User

標籤:style   blog   http   color   使用   os   2014   ar   

看到別人寫的,都看不進去,算了還是自己手寫一遍吧,算是協助自己理解了。寫的比較簡單,例子也比較好懂,什麼時候使用自己看著辦。

1.定義

裝飾者模式:動態地將職責附加到對象上。若要擴充功能,裝飾者提供比繼承更有彈性的替代方案。

裝飾者和被裝飾者對象都喲相同的超類。

裝飾者會使程式中出現很多小類,增加使用難度

可以透明的插入裝飾者,客戶都不知道是和裝飾者打交道

2:使用情境

對象由主體+許多可選的組件或者功能構成,使用繼承或者介面會產生很多類,且很難擴充。

例如,現在需要一杯飲料,主體是水,可以選擇添加甜味、鹹等其他味道,這種情況下就可以使用裝飾者模式。

3:代碼實現

基類,抽象類別

    public abstract class Drink    {        public string DrinkName = "";        //直接列印出名稱        public void PrintName()        {            Console.WriteLine(DrinkName);        }        public abstract double Cost();    }

被裝飾者,水。也可以是茶和其他的飲料

    public class Water : Drink    {        public Water()        {            DrinkName = "水";        }        public override double Cost()        {            return 2;        }    }

裝飾者,加糖,鹽等

    /// <summary>    /// 甜味,每份2元,有點貴額    /// </summary>    public class Sweet:Drink    {        private Drink BaseDrink;        public Sweet(Drink drink)        {            BaseDrink = drink;            DrinkName = " 加糖"+BaseDrink.DrinkName;        }        public override double Cost()        {            return BaseDrink.Cost()+2;        }    }
    /// <summary>    /// 加鹽    /// </summary>    public class Salt : Drink    {        private Drink BaseDrink;        public Salt(Drink drink)        {            BaseDrink = drink;            DrinkName = " 加鹽"+BaseDrink.DrinkName ;        }        public override double Cost()        {            return BaseDrink.Cost() + 1;        }    }

老闆來一份 加一份鹽,2份甜味的水,這個味道重口味額

        static void Main(string[] args)        {            Drink OrderDrink = new Water();            OrderDrink = new Sweet(OrderDrink);            OrderDrink = new Sweet(OrderDrink);            OrderDrink = new Salt(OrderDrink);            OrderDrink.PrintName();            Console.WriteLine("您所需的價錢為:"+OrderDrink.Cost());            Console.ReadKey();        }

好了,飲料來了,付錢吧!騷年...

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.