代理模式,為其他對象提供一種代理以控制對這個對象的通路。在某些情況下,一個對象不适合或者不能直接引用另一個對象,而代理對象可以在用戶端和目标對象之間起到中介的作用。
優點:
代理對象可以在用戶端和目标對象之間起到中介的作用,這樣起到了保護目标對象的作用。
應用場景:
遠端代理。為一個不同的位址空間的對象提供一個本地的代理對象。這個不同的位址空間可以是在同一台主機中,也可在不同的主機中。
虛拟代理。根據需要建立開銷很大的對象。通過它來存放執行個體化需要很長時間的真實對象。這樣可以達到性能的最優化,比如打開一個很大的HTML網頁時。
安全代理。用來控制真實對象通路時的權限。一般用于對象應該有不同的通路權限的時候。
智能指針。是指當調用真實的對象時,代理處理另外一些事。如計算真實對象的引用計數,這樣當該對象沒有引用時,可以自動釋放它;或當第一次引用一個持久對象時,将它裝入記憶體;或在通路一個實際對象前,檢查是否已經鎖定它,以確定其他對象不能改變它。他們都是通過代理通路一個對象時附加一些内務處理。
Subject類,定義了RealSubject和Proxy的共用接口,這樣就在任何使用RealSubject的地方都可以使用Proxy。
代碼:
//Proxy.h
運作結果: