代理模式:為其他對象提供一種代理以控制對這個對象的通路
代理模式的作用:為其他對象提供一種代理以控制對這個對象的通路: 就是一個人或者機構代表另一個人或者機構采取行動。在一些情況下,一個客戶不想或者不能夠直接引用一個對象,而代理對象可以在用戶端和目标對象之間起到中介的作用。
代理模式角色:代理模式一般涉及到三個角色 :抽象角色、代理角色、真實角色
抽象角色:聲明真實對象和代理對象的共同接口;
代理角色:代理對象角色内部含有對真實對象的引用,進而可以操作真實對象,同時代理對象提供與真實對象相同的接口以便在任何時
刻都能代替真實對象。同時,代理對象可以在執行真實對象操作時,附加其他的操作,相當于對真實對象進行封裝。
真實角色:代理角色所代表的真實對象,是我們最終要引用的對象。
他們之間的關系如圖:
代理模式的應用:
1) 遠端代理
它為一個對象在不同的位址空間提供局部代表。這樣就可以隐藏一個對象存在于不同位址空間的事實,它的例子就是webserver。
2) 虛拟代理
它根據需求建立開銷比較大的對象,通過它來存放執行個體化需要很長時間的真實對象。例如,當我們浏覽網頁時,網頁中可能有一些比較大的圖檔,雖然圖檔比較大,但是你還是可以很快地打開網頁,然而圖檔卻不能在第一時間顯示,可能要在幾秒後才能正常顯示,在這裡就是通過虛拟代理來替換真實的圖檔。
3)保護代理
它用于控制對原對象的通路,保護代理用于對象應該有不同的通路權限的時候。
4)智能引用
它用于指當調用真實對象時,代理執行額外的一些操作,處理另外一些事情。例如c++中的智能指針,它取代了簡單的指針,它會對它所指向的對象執行一些額外的操作。
接下來看代碼是怎麼實作的:
抽象模型
真實對象:
代理對象:
最後寫一個測試:
ps:在android中的代理,如
binder,處理不同程序間ipc,就是在不同的位址。