適配器模式將一個類的接口,轉化成客戶期望的另一個接口,適配器讓原本接口不兼容的類可以合作無間。
裝飾者模式:動態的將責任附加到對象上(因為利用組合而不是繼承來實現,而組合是可以在運行時進行隨機組合的)。若要擴展功能,裝飾者提供了比繼承更富有彈性的替代方案(同樣地,通過組合可以很好的避免類暴漲,也規避了繼承中的子類必須無條件繼承父類所有屬性的弊端)。
特點:
1. 裝飾者和被裝飾者擁有相同的超類型(可能是抽象類也可能是接口)
2. 可以用多個裝飾類來包裝一個對象,裝飾類可以包裝裝飾類或被裝飾對象
3. 因為裝飾者和被裝飾者擁有相同的抽象類型,因此在任何需要原始對象(被包裝)的場合,都可以用裝飾過的對象來替代它。
4. 裝飾者可以在被裝飾者的行為之前或之后,加上自己的附加行為,以達到特殊目的
5. 因為對象可以在任何的時候被裝飾,所以可以在運行時動態地、不限量地用你喜歡的裝飾者來裝飾對象
java.io庫是最好的例子
OutputStream
ByteArrayOutputStream
FileOutputStream
PipedOutputStream
FilterOutputStream
BufferedOutputStream
DataOutputStream
小結:裝飾者模式——動態地將責任附加到對象上。想要擴展功能,裝飾者提供了有別於繼承的另外一種選擇。是一個很好的符合了開閉原則的設計模式。
總結:適配器模式主要是為了接口的轉換,而裝飾者模式關注的是通過組合來動態的為被裝飾者注入新的功能或行為(即所謂的責任)。
適配器將一個對象包裝起來以改變其接口;裝飾者將一個對象包裝起來以增強新的行為和責任;而外觀將一群對象包裝起來以簡化其接口