經(jīng)驗(yàn)不在于年限,在于積累---專注互聯(lián)網(wǎng)軟件開發(fā)

          把工作當(dāng)事業(yè)做,把項(xiàng)目當(dāng)作品做!

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            55 Posts :: 0 Stories :: 66 Comments :: 0 Trackbacks

          先簡單介紹Decorator 模式(裝飾模式)的內(nèi)容和應(yīng)用場景。

          裝飾模式可以動(dòng)態(tài)地給一個(gè)對(duì)象添加額外的職責(zé)。雖然,利用子類繼承也可以實(shí)現(xiàn)這樣的功能,但是裝飾模式提供了一個(gè)更靈活的方式。
          因?yàn)槔^承會(huì)為類型引入的靜態(tài)特質(zhì),使得這種擴(kuò)展方式缺乏靈活性;
          并且隨著子類的增多(擴(kuò)展功能的增多),各種子類的組合(擴(kuò)展功能的組合)會(huì)導(dǎo)致更多子類的膨脹。

          下面是標(biāo)準(zhǔn)Decorator 模式的UML結(jié)構(gòu)圖:

          clip_image001

          [此圖來自GOF 《設(shè)計(jì)模式》一書]

          現(xiàn)在結(jié)合我實(shí)際開發(fā)的一個(gè)例子談?wù)勥@個(gè)模式的重構(gòu)應(yīng)用。

          還是那個(gè)SEO的項(xiàng)目,涉及群登錄、群發(fā)帖、群回復(fù)等功能。為了客戶調(diào)用簡單和代碼重用,
          設(shè)計(jì)的時(shí)候使用三個(gè)類來封裝這些功能:SiteLogin、SitePost、SiteReply。每個(gè)站點(diǎn)的登錄發(fā)帖回復(fù)功能都是調(diào)用這三個(gè)類實(shí)現(xiàn)的。

          剛開始設(shè)計(jì)時(shí),只考慮一般HTTP協(xié)議的GET、POST請(qǐng)求,因?yàn)閯傞_始預(yù)研的時(shí)候,發(fā)現(xiàn)幾個(gè)網(wǎng)站都是這樣處理登錄發(fā)帖回復(fù)的。

          隨著后來,網(wǎng)站對(duì)象的不斷增加,發(fā)現(xiàn)有下面的兩個(gè)新需求:

          1. 有些站點(diǎn)采用Content-Type為multipart/form-data的方式提交,而不是默認(rèn)的application/x-www-form-urlencoded方式。
          這兩種方式,在httpclient 3.1 中處理方法是完全不同的(雖然4.0版本已經(jīng)合并到一起了)。

          2. 有些站點(diǎn)是采用https的方式提交的(增加額外的功能)。

          3. 有些網(wǎng)站是這兩種擴(kuò)展需求都存在。

          當(dāng)然,為了應(yīng)付這樣的變數(shù),處理方法有很多,可以在代碼中直接使用if語句來判斷,也可以通過子類繼承的方式增強(qiáng)這樣的功能。
          使用if語句的方式,處理這樣比較大的需求,是不優(yōu)雅的。子類繼承的方式,在需求組合時(shí)會(huì)出現(xiàn)子類數(shù)目爆炸式增長。
          通過使用Decorator 模式的重構(gòu),可以比較好的處理這類問題。

          最后設(shè)計(jì)的UML圖如下(代碼就不貼出來了):

          image

          友情提示:本博文章歡迎轉(zhuǎn)載,但請(qǐng)注明出處:陳新漢
          posted on 2009-09-19 10:52 hankchen 閱讀(1716) 評(píng)論(2)  編輯  收藏 所屬分類: 設(shè)計(jì)模式

          Feedback

          # re: 設(shè)計(jì)模式重構(gòu)應(yīng)用---Decorator模式 2009-09-20 11:40 99書城
          是打開附件獨(dú)守空房  回復(fù)  更多評(píng)論
            

          # re: 設(shè)計(jì)模式重構(gòu)應(yīng)用---Decorator模式 2009-10-18 12:28 天堂露珠
          不錯(cuò)的Decorator實(shí)踐。就是要把變化的部分分離出來。  回復(fù)  更多評(píng)論
            


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 东方市| 凌海市| 顺义区| 龙山县| 铜鼓县| 贞丰县| 军事| 常熟市| 大安市| 丰县| 多伦县| 广灵县| 石泉县| 乌拉特中旗| 蒙山县| 黄山市| 依安县| 屯留县| 类乌齐县| 万年县| 滕州市| 永平县| 恩施市| 来安县| 濮阳市| 板桥市| 宿迁市| 岑溪市| 云林县| 平谷区| 长春市| 塔河县| 大新县| 宝鸡市| 开阳县| 乌什县| 五指山市| 汶川县| 新安县| 德保县| 眉山市|