<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Flyingis

    Talking and thinking freely !
    Flying in the world of GIS !
    隨筆 - 156, 文章 - 16, 評論 - 589, 引用 - 0
    數(shù)據(jù)加載中……

    [Design Pattern] The Decorator Pattern

    ??? 作者:Flyingis

    ??? 按照常理,還是先闡述基本概念,Decorator Pattern可以用即時(shí)戰(zhàn)略游戲中兵種的裝甲強(qiáng)度來理解,舉一個(gè)典型的例子,魔獸爭霸(或冰峰王座等)中山丘是個(gè)非常厲害的角色了,經(jīng)常能夠一錘擊斃敵人的英雄和士兵,因此被譽(yù)為英雄殺手。既然是英雄殺手,時(shí)常需要沖鋒陷陣,在作戰(zhàn)過程中自然會(huì)面臨敵人的圍攻,此時(shí)我們有多種方式來提升山丘的抗擊打能力,一種是升級他的護(hù)甲,一種是通過魔法師給他施加增加防護(hù)的魔法,一種是等級到6時(shí)使用終極魔法來大幅度提高裝甲的防護(hù),還有一種就是使用無敵的魔法瓶,在規(guī)定時(shí)間內(nèi)誰都拿他沒轍,等等。雖然我不知道暴雪公司的工程師具體是如何實(shí)現(xiàn)這種功能設(shè)計(jì)的,但絕對不會(huì)是準(zhǔn)備多個(gè)具有不同防御等級的山丘對象來供程序調(diào)用,如Shanqiu1、Shanqiu2……ShanqiuN,這樣設(shè)計(jì)笨拙,代碼繁多,如果游戲中其他兵種的裝甲、攻擊力的設(shè)計(jì)都是如此,那即使是天才團(tuán)隊(duì)也會(huì)天天在上帝面前禱告的。

    ??? Decorator Pattern在這種情況下就可以發(fā)揮作用了,在普通裝甲升級時(shí),使用普通的裝甲升級的裝飾器,在使用終極魔法時(shí),使用終極魔法裝甲升級的裝飾器。

    public?abstract?class?Soldier?{
    ??String?info?
    =?"Soldier's?name:";
    ??
    public?String?getInfo()?{
    ????
    return?info;
    ??}

    ??
    public?abstract?int?armor();
    }


    public?abstract?class?SoldierDecorator extends Soldier {
    ??
    public?abstract?String?getInfo();
    }


    public?class?NormalArmorUpdate?extends?SoldierDecorator?{
    ??Soldier?soldier;
    ??
    public?NormalArmorUpdate(Soldier?soldier)?{
    ????
    this.soldier?=?soldier;
    ??}


    ??
    public?String?getInfo()?{
    ????
    return?soldier.getInfo()?+?"Shanqiu?normal?update!";
    ??}


    ??
    public?int?armor()?{
    ????
    return?soldier.armor()?+?1;
    ??}

    }


    public?class?MagicArmorUpdate?extends?SoldierDecorator?{
    ??Soldier?soldier;
    ??
    public?MagicArmorUpdate(Soldier?soldier)?{
    ????
    this.soldier?=?soldier;
    ??}

    ??
    public?String?getInfo()?{
    ????
    return?soldier.getInfo()?+?"Shanqiu?magic?update!";
    ??}


    ??
    public?int?armor()?{
    ????
    return?soldier.armor()?+?5;
    ??}

    }


    public?class?Shanqiu?extend?Soldier?{
    ??
    public?int?armor()?{
    ????
    //?初始裝甲厚度
    ????return?3;
    ??}

    }


    public?class?PlayingGame?{
    ??
    public?static?void?main(String?args[])?{
    ????Soldier?soldier?
    =?new?Shanqiu();
    ????System.out.println(
    "Initialized?armor:"?+?soldier.armor());

    ????
    //?普通裝甲升級
    ????soldier?=?new?NormalArmorUpdate(soldier);
    ????System.out.println(
    "Initialized?armor:"?+?soldier.armor());

    ????
    //??使用終極魔法后裝甲升級
    ????soldier?=?new?MagicArmorUpdate(soldier);
    ????System.out.println(
    "Initialized?armor:"?+?soldier.armor());
    ??}

    }


    ??? 這樣就避免了建立多個(gè)Shanqiu類來描述他的不同狀態(tài),終極魔法時(shí)間過去后,還可以增加一個(gè)Decorator來減去相應(yīng)的裝甲厚度,給編程帶來了方便。

    ??? Decorator Pattern設(shè)計(jì)的目的,是為了能夠在運(yùn)行時(shí)而不是編譯期來動(dòng)態(tài)改變對象的狀態(tài),使用組合的方式來增減Decorator,而不是去修改原有的代碼來滿足業(yè)務(wù)的需要,這樣利于程序的擴(kuò)展。當(dāng)然,在Java中使用接口同樣能夠輕便的實(shí)現(xiàn)文中描述的業(yè)務(wù)需要,但哪種更好,哪種更優(yōu)?

    ??? Java中的IO提供了大量Decorator Pattern設(shè)計(jì)的實(shí)例,在筆者很久的一篇隨筆中對此進(jìn)行了簡單介紹,建議還是看看JDK的幫助文檔。

    ??? 參考資料:《Head First Design Pattern》

    posted on 2006-11-07 11:04 Flyingis 閱讀(3128) 評論(3)  編輯  收藏 所屬分類: 架構(gòu)與設(shè)計(jì)

    評論

    # re: [Design Pattern] Decorator Pattern  回復(fù)  更多評論   

    SoldierDecorator should extends Soldier
    2006-11-07 12:17 | jim[匿名]

    # re: [Design Pattern] Decorator Pattern  回復(fù)  更多評論   

    @jim[匿名]
    I'm sorry. It's a terrible mistake and it has been corrected.
    2006-11-07 14:48 | Flyingis

    # re: [Design Pattern] The Decorator Pattern  回復(fù)  更多評論   

    解釋得很好,很具體,不過抽象一點(diǎn)說,Decorator Pattern是為了動(dòng)態(tài)擴(kuò)展父類的方法
    2006-11-09 11:34 | itVincent
    主站蜘蛛池模板: 久久免费国产精品| 亚洲AV无码专区在线电影成人 | 久久最新免费视频| 亚洲精品高清在线| 久久国产精品免费| 亚洲av中文无码乱人伦在线播放 | a级毛片免费观看网站| 亚洲午夜成人精品电影在线观看| 又硬又粗又长又爽免费看| 亚洲国产精品自在拍在线播放| xxxx日本在线播放免费不卡| 亚洲人成网站在线观看播放| 日韩视频免费在线观看| 亚洲日韩在线视频| 色吊丝最新永久免费观看网站| 香蕉视频亚洲一级| 国产亚洲欧洲Aⅴ综合一区| 国产成年无码久久久免费| 亚洲最大成人网色| 久久精品免费一区二区喷潮 | 99视频全部免费精品全部四虎| 亚洲乱码在线视频| 国产免费看插插插视频| 亚洲阿v天堂在线2017免费| 亚洲国产精品一区二区第一页| h视频在线免费看| 免费很黄无遮挡的视频毛片| 亚洲人成人一区二区三区| 足恋玩丝袜脚视频免费网站| 亚洲AV女人18毛片水真多| 激情综合色五月丁香六月亚洲| 最新黄色免费网站| 色窝窝亚洲av网| 日产亚洲一区二区三区| 国产无遮挡又黄又爽免费视频 | 亚洲国产成人久久精品影视| 毛片免费在线播放| 成人免费无码H在线观看不卡| 亚洲婷婷天堂在线综合| 亚洲va中文字幕无码| 在线观看免费中文视频|