国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

裝飾模式

2019-11-15 00:23:33
字體:
來源:轉載
供稿:網友
裝飾模式

裝飾模式又名包裝(Wrapper)模式

裝飾模式以對客戶端透明的方式擴展對象的功能,是繼承關系的一個替代方案

裝飾模式以對客戶透明的方式動態的給一個對象附加上更多的責任。換言之,客戶端并不會覺得對象在裝飾前和裝飾后有什么不同。

裝飾模式可以在不創造更多子類的情況下,將對象的功能加以擴展。

裝飾模式把客戶端的調用委派到被裝飾類。裝飾模式的關鍵在于這種擴展完全是透明的。

裝飾模式是在不必改變原類文件和使用繼承的情況下,動態的擴展一個對象的功能。它是通過創建一個包裝對象,也就是裝飾來包裹真實的對象。

裝飾模式的特點:

裝飾對象和真實對象有相同的接口。這樣客戶端對象就可以以和真實對象相同的方式和裝飾對象交互。

裝飾對象包含一個真實對象的引用(reference)

裝飾對象接收所有來自客戶端的請求。它把這些請求轉發給真實的對象。

裝飾對象可以在轉發這些請求以前或以后增加一些附加功能。這樣就確保了在運行時,不用修改給定對象的結構就可以在外部增加附加的功能。在面向對象的設計中,通常是通過繼承來實現對給定類的功能擴展。

裝飾模式與繼承的比較

裝飾模式              繼承

用來擴展特定對象的功能       用來擴展一類對象的功能

不需要子類             需要子類

動態                靜態

運行時分配職責           編譯時分派職責

防止由于子類而導致的復雜和混亂   導致很多子類產生

更多的靈活性            缺乏靈活性

對于一個給定的對象,同時可能有不同的裝飾對象,客戶端可以通過它的需要選擇合適的裝飾對象發送消息。

代碼示例

  1 package decorator;  2 /*  3  * 抽象構件角色(Component):給出一個抽象接口,以規范準備接收附加責任的對象。  4  */  5 public interface Component  6 {  7     public void doSomething();  8 }  9  10  11 package decorator; 12 /* 13  * 具體構件角色(Concrete Component):定義一個將要接收附加責任的類。 14  */ 15 public class ConcreteComponent implements Component 16 { 17     @Override 18     public void doSomething() 19     { 20         System.out.View Code


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安仁县| 罗源县| 新竹县| 阜新市| 武隆县| 许昌县| 七台河市| 增城市| 房产| 华安县| 来宾市| 西林县| 桂东县| 池州市| 金门县| 南和县| 文山县| 永兴县| 琼中| 莱阳市| 仪征市| 黔东| 肇东市| 富宁县| 阿合奇县| 武陟县| 林周县| 南华县| 塘沽区| 鹤岗市| 溧阳市| 明光市| 若羌县| 莎车县| 微山县| 福泉市| 克山县| 昌图县| 大冶市| 漯河市| 滦南县|