經驗不在于年限,在于積累---專注互聯網軟件開發

          把工作當事業做,把項目當作品做!

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            55 Posts :: 0 Stories :: 66 Comments :: 0 Trackbacks

          先簡單介紹Decorator 模式(裝飾模式)的內容和應用場景。

          裝飾模式可以動態地給一個對象添加額外的職責。雖然,利用子類繼承也可以實現這樣的功能,但是裝飾模式提供了一個更靈活的方式。
          因為繼承會為類型引入的靜態特質,使得這種擴展方式缺乏靈活性;
          并且隨著子類的增多(擴展功能的增多),各種子類的組合(擴展功能的組合)會導致更多子類的膨脹。

          下面是標準Decorator 模式的UML結構圖:

          clip_image001

          [此圖來自GOF 《設計模式》一書]

          現在結合我實際開發的一個例子談談這個模式的重構應用。

          還是那個SEO的項目,涉及群登錄、群發帖、群回復等功能。為了客戶調用簡單和代碼重用,
          設計的時候使用三個類來封裝這些功能:SiteLogin、SitePost、SiteReply。每個站點的登錄發帖回復功能都是調用這三個類實現的。

          剛開始設計時,只考慮一般HTTP協議的GET、POST請求,因為剛開始預研的時候,發現幾個網站都是這樣處理登錄發帖回復的。

          隨著后來,網站對象的不斷增加,發現有下面的兩個新需求:

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

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

          3. 有些網站是這兩種擴展需求都存在。

          當然,為了應付這樣的變數,處理方法有很多,可以在代碼中直接使用if語句來判斷,也可以通過子類繼承的方式增強這樣的功能。
          使用if語句的方式,處理這樣比較大的需求,是不優雅的。子類繼承的方式,在需求組合時會出現子類數目爆炸式增長。
          通過使用Decorator 模式的重構,可以比較好的處理這類問題。

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

          image

          友情提示:本博文章歡迎轉載,但請注明出處:陳新漢
          posted on 2009-09-19 10:52 hankchen 閱讀(1715) 評論(2)  編輯  收藏 所屬分類: 設計模式

          Feedback

          # re: 設計模式重構應用---Decorator模式 2009-09-20 11:40 99書城
          是打開附件獨守空房  回復  更多評論
            

          # re: 設計模式重構應用---Decorator模式 2009-10-18 12:28 天堂露珠
          不錯的Decorator實踐。就是要把變化的部分分離出來。  回復  更多評論
            


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 安龙县| 东城区| 同江市| 洪江市| 手游| 张家界市| 华阴市| 柞水县| 靖西县| 桂东县| 鄂州市| 乡宁县| 陵水| 庆云县| 汪清县| 金沙县| 剑阁县| 射阳县| 新和县| 广饶县| 凤翔县| 余江县| 马龙县| 广元市| 八宿县| 洮南市| 荆州市| 永昌县| 阳泉市| 炎陵县| 陆河县| 玛多县| 陈巴尔虎旗| 麻城市| 旺苍县| 江陵县| 洛阳市| 上饶市| 滨州市| 黄山市| 宁安市|