設(shè)計模式---裝飾模式(DesignPattern_Decorator)

摘錄自:設(shè)計模式與游戲完美開發(fā)

十年磨一劍糠聪,作者將設(shè)計模式理論巧妙地融入到實(shí)踐中队寇,以一個游戲的完整實(shí)現(xiàn)呈現(xiàn)設(shè)計模式的應(yīng)用及經(jīng)驗(yàn)的傳承 《軒轅劍》之父——蔡明宏、資深游戲制作人——李佳澤、Product Evangelist at Unity Technologies——Kelvin Lo益眉、信仁軟件設(shè)計創(chuàng)辦人—— 賴信仁、資深3D游戲美術(shù)——劉明愷 聯(lián)合推薦全書采用了整合式的項(xiàng)目教學(xué)姥份,即以一個游戲的范例來應(yīng)用23種設(shè)計模式的實(shí)現(xiàn)貫穿全書郭脂,讓讀者學(xué)習(xí)到整個游戲開發(fā)的全過程和作者想要傳承的經(jīng)驗(yàn),并以淺顯易懂的比喻來解析難以理解的設(shè)計模式殿衰,讓想深入了解此領(lǐng)域的讀者更加容易上手朱庆。


工程GitHub

DECORATOR—Mary過完輪到Sarly過生日,還是不要叫她自己挑了闷祥,不然這個月伙食費(fèi)肯定玩完娱颊,拿出我去年在華山頂上照的照片,在背面寫上“最好的的禮物凯砍,就是愛你的Fita”箱硕,再到街上禮品店買了個像框,再找隔壁搞美術(shù)設(shè)計的Mike設(shè)計了一個漂亮的盒子裝起來……悟衩,我們都是Decorator剧罩,最終都在修飾我這個人呀,怎么樣座泳,看懂了嗎惠昔?

裝飾模式:裝飾模式以對客戶端透明的方式擴(kuò)展對象的功能,是繼承關(guān)系的一個替代方案挑势,提供比繼承更多的靈活性镇防。動態(tài)給一個對象增加功能,這些功能可以再動態(tài)的撤消潮饱。增加由一些基本功能的排列組合而產(chǎn)生的非常大量的功能来氧。

using UnityEngine;
using System.Collections;

namespace DesignPattern_Decorator
{
    // 動態(tài)增加組建的基類
    public abstract class Component
    {
        public abstract void Operator();
    }

    //實(shí)例組件
    public class ConcreteComponent : Component
    {
        public override void Operator()
        {
            Debug.Log("ConcreteComponent.Operator");
        }
    }

    // 持有指向Component的reference,須符合Component的介面
    public class Decorator : Component
    {
        Component m_Component;
        public Decorator(Component theComponent)
        {
            m_Component = theComponent;
        }

        public override void Operator()
        {
            m_Component.Operator();
        }
    }

    // 增加額外的功能A
    public class ConcreteDecoratorA : Decorator
    {
        Component m_Component;
        public ConcreteDecoratorA(Component theComponent) : base(theComponent)
        {
        }

        public override void Operator()
        {
            base.Operator();
            AddBehaivor();
        }

        private void AddBehaivor()
        {
            Debug.Log("ConcreteDecoratorA.AddBehaivor");
        }
    }

    // 增加額外的功能B
    public class ConcreteDecoratorB : Decorator
    {
        Component m_Component;
        public ConcreteDecoratorB(Component theComponent) : base(theComponent)
        {
        }

        public override void Operator()
        {
            base.Operator();
            AddBehaivor();
        }

        private void AddBehaivor()
        {
            Debug.Log("ConcreteDecoratorB.AddBehaivor");
        }
    }

}
using UnityEngine;
using System.Collections;
using DesignPattern_Decorator;
using DesignPattern_ShapeDecorator;

public class DecoratorTest : MonoBehaviour
{

    void Start()
    {
        //UnitTest_Shape();
        UnitTest();
    }

    // 
    void UnitTest()
    {

        // 物件
        ConcreteComponent theComponent = new ConcreteComponent();

        // 增加Decorator
        ConcreteDecoratorA theDecoratorA = new ConcreteDecoratorA(theComponent);
        theDecoratorA.Operator();

        ConcreteDecoratorB theDecoratorB = new ConcreteDecoratorB(theComponent);
        theDecoratorB.Operator();

        // 再增加一層
        ConcreteDecoratorB theDecoratorB2 = new ConcreteDecoratorB(theDecoratorA);
        theDecoratorB2.Operator();
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末香拉,一起剝皮案震驚了整個濱河市啦扬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌凫碌,老刑警劉巖扑毡,帶你破解...
    沈念sama閱讀 223,207評論 6 521
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異证鸥,居然都是意外死亡僚楞,警方通過查閱死者的電腦和手機(jī)勤晚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,455評論 3 400
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來泉褐,“玉大人赐写,你說我怎么就攤上這事∧ぴ撸” “怎么了挺邀?”我有些...
    開封第一講書人閱讀 170,031評論 0 366
  • 文/不壞的土叔 我叫張陵,是天一觀的道長跳座。 經(jīng)常有香客問我端铛,道長,這世上最難降的妖魔是什么疲眷? 我笑而不...
    開封第一講書人閱讀 60,334評論 1 300
  • 正文 為了忘掉前任禾蚕,我火速辦了婚禮,結(jié)果婚禮上狂丝,老公的妹妹穿的比我還像新娘换淆。我一直安慰自己,他們只是感情好几颜,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,322評論 6 398
  • 文/花漫 我一把揭開白布倍试。 她就那樣靜靜地躺著,像睡著了一般蛋哭。 火紅的嫁衣襯著肌膚如雪县习。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,895評論 1 314
  • 那天谆趾,我揣著相機(jī)與錄音躁愿,去河邊找鬼。 笑死沪蓬,一個胖子當(dāng)著我的面吹牛攘已,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播怜跑,決...
    沈念sama閱讀 41,300評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼吠勘!你這毒婦竟也來了性芬?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,264評論 0 277
  • 序言:老撾萬榮一對情侶失蹤剧防,失蹤者是張志新(化名)和其女友劉穎植锉,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體峭拘,經(jīng)...
    沈念sama閱讀 46,784評論 1 321
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡俊庇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,870評論 3 343
  • 正文 我和宋清朗相戀三年狮暑,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辉饱。...
    茶點(diǎn)故事閱讀 40,989評論 1 354
  • 序言:一個原本活蹦亂跳的男人離奇死亡搬男,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出彭沼,到底是詐尸還是另有隱情缔逛,我是刑警寧澤,帶...
    沈念sama閱讀 36,649評論 5 351
  • 正文 年R本政府宣布姓惑,位于F島的核電站褐奴,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏于毙。R本人自食惡果不足惜敦冬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,331評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望唯沮。 院中可真熱鬧脖旱,春花似錦、人聲如沸烂翰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,814評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽甘耿。三九已至踊兜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間佳恬,已是汗流浹背捏境。 一陣腳步聲響...
    開封第一講書人閱讀 33,940評論 1 275
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留毁葱,地道東北人垫言。 一個月前我還...
    沈念sama閱讀 49,452評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像倾剿,于是被迫代替她去往敵國和親筷频。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,995評論 2 361

推薦閱讀更多精彩內(nèi)容