代理模式、適配器模式和裝飾器模式,在實現上差別不大。幾乎都是以繼承、依賴或者組合的方式,將源類歸入目標代理、適配和裝飾類。
因此簡要整理一下他們的區別。設計
- | 代理模式 | 適配器模式 | 裝飾器模式 |
---|---|---|---|
解決問題 | 想在訪問一個類時作一些控制 | 系統須要使用現有的類,而此類的接口不符合系統的須要。 想要創建一個能夠重複使用的類,用於與一些彼此之間沒有太大關聯的一些類,包括一些可能在未來引進的類一塊兒工做,這些源類不必定有一致的接口。 經過接口轉換,將一個類插入另外一個類系中。 |
在不想增長不少子類的狀況下擴展類。 |
關鍵代碼 | 實現與被代理類組合 | 適配器繼承或依賴已有的對象,實現想要的目標接口 | 在客戶端和複雜系統之間再加一層,這一層將調用順序、依賴關係等處理好 |
差別 | 適配器模式主要改變所考慮對象的接口,而代理模式不能改變所代理類的接口。 裝飾器模式爲了加強功能,而代理模式是爲了加以控制。 |
適配器不是在詳細設計時添加的,而是解決正在服役的項目的問題。 | 可代替繼承。 |