這兩種模式在Java IO包下應用很多
典型的包裝者模式:InputStream ---> FilterInputStream ---> InputStream
典型的適配器模式:Reader ---> InputStreamReader ---> InputStream
一、定義
先看下兩者的定義
裝飾者:不改變接口,加入新的責任
適配器:講一個接口改爲另一個接口
不同點:
從定義我們看得出,一個改變了被包裝對象的接口,一個保持原有的接口。
二、類圖
(上點圖片更直觀,這裏借用下HeadFirst的類圖)
裝飾者模式
適配器模式
總結!
不同點:
裝飾者包含了一個裝飾者類型的對象
適配器包含了一個其他類型的對象
共同點:
這對於調用者來說都是透明的,調用者只知道他們操作的是被調用者類型的對象。
所以共同點:
1. 讓調用者代碼與真實被調用的對象解耦。
2. 封裝可變的部分代碼
三、實現
在代碼的實現上,他們也有明顯的區別。
不同點:
裝飾者在實現的過程中,只需要在調用被包裝對象相同方法前加入新的”責任“
適配器在實現接口的方法時往往要調用很多的被包裝對象的方法類完成任務。這也是在應用適配器方法時考慮最多的。
寫得不好,歡迎大家討論!!