裝飾模式 vs (靜態)代理模式

這兩個設計模式都屬於結構型模式,且很是類似,其UML圖以下:
裝飾模式:segmentfault

clipboard.png
以下IO方法就是使用了裝飾模式:設計模式

BufferedReader reader = new BufferedReader(new InputStreamReader(Resources.getResourceAsStream(resource))

(靜態)代理模式:提到代理模式通常是指靜態代理模式,動態代理模式會在動態代理實現原理中專門講解spa

clipboard.png

共同點:設計

  • 裝飾者與被裝飾者,代理類與被代理類,都是繼承自同一個接口,能夠令他們在被調用時相互替換

不一樣點:代理

  • 被裝飾者每每被做爲裝飾者的構造器參數傳入裝飾者,強調被裝飾者功能的加強;被代理類每每在代理類內部被建立,因此這裏用UML裏組合的關係,強調對被代理類的訪問控制。
  • 裝飾者裏持有的是被裝飾者的接口類型,因此能夠裝飾全部實現同一接口的類;代理類是針對某一個具體的類進行代理,因此對每個類都要實現一個對應的代理類,這是靜態代理模式的侷限,能夠使用動態代理模式來彌補。
相關文章
相關標籤/搜索