台灣最大程式設計社群網站
線上人數
1893
 
會員總數:245256
討論主題:189112
歡迎您免費加入會員
討論區列表 >> 專欄文章 >> C# Design Pattern - Decorator 裝飾者模式 介紹
[]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
C# Design Pattern - Decorator 裝飾者模式 介紹
價值 : 0 QP  點閱數:1380 回應數:0

樓主

E-Troy 版主
初學者
80 52
283 11
發送站內信

Decorator的特性是採用組合、而非繼承,實現運行時動態地擴展物件功能的能力,而且可以
根據需要擴展多個功能。避免單獨使用繼承而產生靈活性差和"多子類別衍生問題。但它最根本的作用是在於裝飾。

例如開發一個報表功能可能只有顯示和下載的兩個功能,
之後又要加入顯示時先檢查是否有權限、下載前也要檢查權限、權限檢查後,判斷系統日期是否為月底。
所以為了要解決新增功能問題,不要修改原本的程式碼,又可以擴充,Decorator就是符合開發封閉原則,對修改封閉,對擴充開放,
藉以降低系統可能的錯誤風險,使用Decorator模式的組合特性來達到動態擴充相關功能。

假如在遊戲中開發一種坦克,除了各種不同型號的坦克外,還希望在不同場合中增加一種或多種功能,比如紅外線夜視、水陸兩棲,衛星定位等等。



建立抽象坦克類別

然後按照上面的結構,一樣創造了T75、790的場克,功能結構也是依不同的功能性而產生不同的陳述結構

實現介面繼承,非實現繼承,組合物件

產生各種不同的功能並擴展,同時可依需求限制其功能,讓各種不同的坦克有等級上的差別

Decorator需要擴展一個類的功能,或給一個類增加附加責任,動態地給一個物件增加功能,這些功能可以動態撤銷。也可以增加由一些基本功能的排列組合而產生的非常大量的功能。

Decorator在.NET(Stream)中的應用,透過.Net讓Decorator模式省略了抽象裝飾角色(Decorator):





下面的程式中BufferedStream擴展了緩衝的功能、CryptoStream擴展了緩衝,加密的功能:


所以透過.NET的Library呈現,可以看到BufferedStream是繼承於Stream類別,依然可以達到同樣的效果。


搜尋相關Tags的文章: [ C# ] , [ Decorator ] ,
本篇文章發表於2015-10-16 09:37
== 簽名檔 ==
上帝的藝術-電腦神手的領域 - http://etroy.pixnet.net/blog
上帝的藝術-微軟的神域 - http://etroy-com.blogspot.tw/
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
目前尚無任何回覆
   

回覆
如要回應,請先登入.