第6章 裝飾模式

來源:互聯網
上載者:User

標籤:des   cWeb   style   blog   http   color   java   使用   

裝飾模式:動態地給一個對象添加一些額外的職責,就增加功能來說,裝飾模式比產生子類更為靈活。

Component是定義一個對象介面,可以給這些對象動態地添加職責。ConcreateComponet是定義了一個具體的對象,也可以給這個對象添加一些職責。Decorator,裝飾抽象類別,繼承了Component,從外類來擴充Component類的功能,但對於Component來說,是無需知道Decorator的存在的。至於ConcreateDecorator就是具體的裝飾對象,起到給Component添加職責的功能。

 

裝飾模式是利用SetComponent來對對象進行封裝的,這樣每個裝飾對象的實現就和如何使用這個對象分離開了,每個裝飾對象只關心自己的功能,不需要關係如何被添加到對象鏈當中。

裝飾模式總結:
裝飾模式是為已有功能動態地添加更多功能的一種方式。
裝飾模式把每個要裝飾的功能放在單獨的類中,並讓這個類封裝它所要裝飾的對象,因此,當需要執行特殊行為時,客戶代碼就可以在運行時根據需要有選擇地、按順序地使用裝飾功能封裝對象了。

裝飾模式的優點:
把類中的裝飾功能從類中搬移去除,這樣可以簡化原有的類。有效地把類的核心職責和裝飾功能區分開了。而且可以去除相關類中重複的裝飾邏輯。

 

範例程式碼:

using System;using System.Collections.Generic;using System.Text;namespace 裝飾模式{    class Program    {        static void Main(string[] args)        {            Person xc = new Person("小菜");            Console.WriteLine("\n第一種裝扮:");            Sneakers pqx = new Sneakers();            BigTrouser kk = new BigTrouser();            TShirts dtx = new TShirts();            pqx.Decorate(xc);            kk.Decorate(pqx);            dtx.Decorate(kk);            dtx.Show();            Console.WriteLine("\n第二種裝扮:");            LeatherShoes px = new LeatherShoes();            Tie ld = new Tie();            Suit xz = new Suit();            px.Decorate(xc);            ld.Decorate(px);            xz.Decorate(ld);            xz.Show();            Console.WriteLine("\n第三種裝扮:");            Sneakers pqx2 = new Sneakers();            LeatherShoes px2 = new LeatherShoes();            BigTrouser kk2 = new BigTrouser();            Tie ld2 = new Tie();            pqx2.Decorate(xc);            px2.Decorate(pqx);            kk2.Decorate(px2);            ld2.Decorate(kk2);            ld2.Show();            Console.Read();        }    }    class Person    {        public Person()        { }        private string name;        public Person(string name)        {            this.name = name;        }        public virtual void Show()        {            Console.WriteLine("裝扮的{0}", name);        }    }    class Finery : Person    {        protected Person component;        //打扮        public void Decorate(Person component)        {            this.component = component;        }        public override void Show()        {            if (component != null)            {                component.Show();            }        }    }    class TShirts : Finery    {        public override void Show()        {            Console.Write("大T恤 ");            base.Show();        }    }    class BigTrouser : Finery    {        public override void Show()        {            Console.Write("垮褲 ");            base.Show();        }    }    class Sneakers : Finery    {        public override void Show()        {            Console.Write("破球鞋 ");            base.Show();        }    }    class Suit : Finery    {        public override void Show()        {            Console.Write("西裝 ");            base.Show();        }    }    class Tie : Finery    {        public override void Show()        {            Console.Write("領帶 ");            base.Show();        }    }    class LeatherShoes : Finery    {        public override void Show()        {            Console.Write("皮鞋 ");            base.Show();        }    }}

 

完整源碼(漸層過程)下載:06裝飾模式.rar

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.