文章出處

在今天,讀書有時是件“麻煩”事。它需要你付出時間,付出精力,還要付出一份心境。--僅以《大話設計模式》來祭奠那逝去的……

裝飾模式:動態的給一個對象增加一些額外的職責,就增加功能來說,裝飾模式比生成子類更加靈活(適合場景,需要經常動態的添加額外職責的時候使用。穩定的業務不建議使用裝飾模式,增加不必要的代碼量)

1.裝扮小游戲

  給要出門的小伙子打扮一下,衣服都在衣櫥里面,挑選一下打扮起來

  首先建立一個人物模型Person

    public class Person
    {
        public Person() { }

        private string _name;

        public Person(string name)
        {
            this._name = name;
        }

        public virtual void Show()
        {
            Console.WriteLine("裝扮的{0}", _name);
        }
    }

   其次定義一個裝飾類,裝飾類要繼承人物模型類,將人物模型內置到裝飾類中,方便裝飾處理

    public class Finery : Person
    {
        protected Person _component;

        public void Decorate(Person person)
        {
            this._component = person;
        }

        public override void Show()
        {
            if (_component != null)
                _component.Show();
        }
    }

   定義各種服飾類,繼承裝飾類,實現裝飾人物模型的功能

    public class TShirts : Finery
    {
        public override void Show()
        {
            Console.Write("大T恤 ");
            base.Show();
        }
    }

    public class BigTrouser : Finery
    {
        public override void Show()
        {
            Console.Write("垮褲 ");
            base.Show();
        }
    }

   開始裝飾人物模型,實例化一個模型“小張”,首先給小張穿上垮褲,然后是T恤,就可以出門了(裝飾模式是一個鏈式調取方式,由外到內或者是由下到上

        static void Main(string[] args)
        {
            //裝飾模式
            Person person = new Person("小張");

            //再穿一個大T恤
            TShirts dtx = new TShirts();
            dtx.Decorate(person);

            //先穿一個垮褲
            BigTrouser kk = new BigTrouser();
            kk.Decorate(dtx);

            //可以出門了
            kk.Show();
        }

   來看看帥帥的小張吧

  

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()