1. 程式人生 > >輕鬆理解-中高階java開發必知必會之 代理模式和裝飾模式

輕鬆理解-中高階java開發必知必會之 代理模式和裝飾模式

代理模式和裝飾模式分別是什麼?有什麼區別?

這兩個設計模式看起來很像。對裝飾器模式來說,裝飾者(decorator)和被裝飾者(decoratee)都實現同一個 介面。對代理模式來說,代理類(proxy class)和真實處理的類(real class)都實現同一個介面。此外,不論我們使用哪一個模式,都可以很容易地在真實物件的方法前面或者後面加上自定義的方法。

  然而,實際上,在裝飾器模式和代理模式之間還是有很多差別的。裝飾器模式關注於在一個物件上動態的新增方法,然而代理模式關注於控制對物件的訪問。換句話 說,用代理模式,代理類(proxy class)可以對它的客戶隱藏一個物件的具體資訊。因此,當使用代理模式的時候,我們常常在一個代理類中建立一個物件的例項。並且,當我們使用裝飾器模 式的時候,我們通常的做法是將原始物件作為一個引數傳給裝飾者的構造器。

  我們可以用另外一句話來總結這些差別:使用代理模式,代理和真實物件之間的的關係通常在編譯時就已經確定了,而裝飾者能夠在執行時遞迴地被構造。

用程式碼直觀的來看下:

代理模式:

代理的客戶(使用者):

裝飾模式:

但是比較容易區分的哈;

下篇順便再把單例模式給寫了吧