天天看點

設計模式(5)-己所不欲,施之于人(代理模式)

什麼是代理?在我們的日常生活中的例子非常多。

比如上網有的時候使用代理伺服器,通過代理上網,這就是代理的一個非常常見的例子。

從這裡邊可以看到3個對象:真實網路對象,代理對象還有用戶端對象。

真實對象和代理對象還都有通路網絡的方法是以抽象出網絡對象。

 對應的類圖關系如下:

設計模式(5)-己所不欲,施之于人(代理模式)

如圖:

真實的網絡被隐藏起來,我們通路的是代理的網絡對象,同時我們可以在通路代理對象的同時動态的加上比如驗證使用者,清除使用者資訊的方法。

生成的檔案如下:

client.h

client.cpp

Network.h

Network.cpp

ProxyNetwork.h

ProxyNetwork.cpp

RealNetwork.h

RealNetwork.cpp

運作client.cpp中的main,我們得到如下:

設計模式(5)-己所不欲,施之于人(代理模式)

代理模式:為其它對象提供一種代理以控制對這個對象的通路。

代理模式的幾種應用場景:

1,遠端代理,為一個對象在不同的空間提供局部代表,隐藏真實對象,webservice的調用就是一個最好的例子。

2,虛拟代理,根據需要建立開銷很大的對象,通過它來存放執行個體化需要很長時間的真實對象。浏覽網頁時,我們通路緩存中的對象就是其中一個例子。

3,安全代理,控制真實對象的通路權限,不讓外部看到真實的網絡情況。上邊的例子就是一個比較好的執行個體。

繼續閱讀