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

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

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

    posts - 262,  comments - 221,  trackbacks - 0
    一、Decorator模式的定義:

    “Decorator”一詞在英文中的意思是“裝飾工”的意思,在設(shè)計模式中“Decorato模式”的作用也是“動態(tài)地給對象增加一些職責(zé)”。請注意:這句話中有2個重點的地方:

    ·動態(tài):也就是說無法預(yù)先在編譯階段就知道職責(zé)的具體內(nèi)容和添加時機(jī),什么時候添加什么功能完全由客戶在運行時刻規(guī)定。

    ·增加:“Decorator模式”往往用于在現(xiàn)有功能的基礎(chǔ)上針對不同的對象,添加一些不同的功能,實際上我們還可以改變行為的流程。

    二、Decorator模式的好處:

    我們知道,有時候在同一個運行環(huán)境下,由于不同對象具有不同的特性導(dǎo)致了它們在執(zhí)行同一種類型操作時,可能存在一些細(xì)小的差別,這些差別可能體現(xiàn)在:

    第一 參數(shù)不同

    第二 過程不同

    第三 方式不同

    那么針對這三種情況我們可以采取的解決方法有兩種:

    第一 采用繼承的方式。定義一個父類的抽象方法,由不同的子類各自實現(xiàn)不同的操作,但一旦子類一多勢必帶來類的數(shù)量膨脹的問題,難以管理;其次如果只是一些局部的細(xì)微差別而導(dǎo)致了必須重寫整個過程或方法,那么必將導(dǎo)致出現(xiàn)大量的重復(fù)代碼(即功能相同部分的代碼)。我曾經(jīng)看過一些項目,里面存在了大量的重復(fù)代碼,到處都是“Copy-Paste”.只是修改了某處的關(guān)鍵參數(shù)而已。

    而“Duplicate code”正是《重構(gòu)-改善既有代碼的設(shè)計》一書中提到的首要“異味”,這意味著一旦公共部分的功能改變了,那么你有可能需要重新編譯幾個甚至十幾個子類。

    第二 采用“Decorator模式”。首先將功能分解,分成若干個小塊,這是為了后面我們可以動態(tài)地重組。其次將功能部分抽取出來成為一個接口,通過一個實現(xiàn)了接口的基類完成基本的共有功能。一旦我們需要在基類的功能基礎(chǔ)上添加或改變流程,我們就可以通過“Decorator類”實現(xiàn)接口,在接口的實現(xiàn)方法中增加、改變方法的功能或流程。

    比較上面這兩種做法,我們可以看到使用了“Decorator模式”后,代碼更加簡潔了,可重用性和可擴(kuò)展性更高了。其次由于可以在構(gòu)造“Decorator類”的過程中傳遞參數(shù),我們可以動態(tài)的增加、改變原有的功能、流程,而相同部分的功能則委托給基類去完成。最后由于“油漆工”在“被油漆物”外面刷了一層油漆,里面怎么改變對外界來說是透明的。


    三、Decorator模式的適應(yīng)場合:

    Decrator模式的適用場合:
    1).在運行時刻由用戶動態(tài)決定加入的方式和時機(jī),無法在編譯期間決定
    2).需要改變的行為太多,用繼承會導(dǎo)致復(fù)雜性的增加

    四、Decorator模式與Adapater、Builder模式的區(qū)別:

    Adapter和Decorator模式的區(qū)別:
    1).前者關(guān)注的是如何將兩個本來互不相關(guān)的類糅合到一起,后者關(guān)注的是如何在原來功能的基礎(chǔ)上做一些小的調(diào)整

    Builder和Decorator模式的區(qū)別:
    1).前者關(guān)注的是對象的構(gòu)建,后者關(guān)注的是對象功能的添加、個性化
    2).前者主要用于GUI界面構(gòu)建對象的場合、后者主要用于動態(tài)添加功能、改變流程的場合


    -------------------------------------------------------------
    生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。
    posted on 2008-02-19 16:33 Paul Lin 閱讀(2092) 評論(0)  編輯  收藏 所屬分類: 模式與重構(gòu)
    <2008年2月>
    272829303112
    3456789
    10111213141516
    17181920212223
    2425262728291
    2345678

    常用鏈接

    留言簿(21)

    隨筆分類

    隨筆檔案

    BlogJava熱點博客

    好友博客

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲精品国产高清在线观看| 亚洲乱码在线卡一卡二卡新区| 黄色毛片免费在线观看| 最近中文字幕无吗免费高清| 亚洲天堂2017无码中文| 好男人视频社区精品免费| 亚洲高清乱码午夜电影网| 国产精品免费看香蕉| 农村寡妇一级毛片免费看视频| 国产zzjjzzjj视频全免费| 老司机福利在线免费观看| 亚洲色偷拍区另类无码专区| 中文字幕不卡高清免费| 国产AV无码专区亚洲A∨毛片| 日本黄色动图免费在线观看| 亚洲精品视频在线观看免费 | 亚洲成AV人在线观看天堂无码| 日韩电影免费在线观看网站| 亚洲A∨无码一区二区三区| 1a级毛片免费观看| 亚洲欧美国产精品专区久久| 亚洲人成网站18禁止一区| 久久久久久免费一区二区三区 | 亚洲一区二区三区在线| 麻豆国产人免费人成免费视频| 一个人看的www视频免费在线观看| 亚洲中文字幕无码永久在线| 巨波霸乳在线永久免费视频| 亚洲JIZZJIZZ妇女| 亚洲精品乱码久久久久久久久久久久| 91在线手机精品免费观看| 亚洲国产精品无码观看久久| 亚洲人成伊人成综合网久久久| 亚洲视频免费一区| 一级黄色免费大片| 亚洲福利视频一区二区三区| 吃奶摸下高潮60分钟免费视频| 无码人妻精品中文字幕免费 | 亚洲人6666成人观看| 亚洲Av无码乱码在线znlu| 无码一区二区三区免费|