『设计模式』小老弟你猜不透我?-- 代理模式
23種設計模式+額外常用設計模式匯總 (持續更新)
代理模式
代理模式(proxy)模式給某一個對象提供一個替身或占位符,以控制對這個對象的訪問。
所謂代理,就是一個人或者一個機構代表另一個人或者另一個機構采取行動。在一些情況下,一個客戶不想或者不能夠直接引用一個對象,而代理對象可以在客戶端和目標對象之間起到中介作用。
代理模式結構
- 抽象主題(Subject)角色 聲明了真實主題和代理主題的共同接口,這樣一來在任何使用真實主題的地方都可以使用代理主題。
- 代理主題(Proxy)角色 代理主題角色內部含有對真實主題的引用,從而可以再任何時候操作真實主題對象;代理主題角色提供一個與真實主題角色相同的接口,以便可以再任何時候都可以替代真實主題; 控制真實主題的應用,負責在需要的時候創建真實主題對象(和刪除主題對象)
- 真實主題(RealSubject)角色 定義了代理角色所代表的真實對象
應用場景:
1. 遠程(Remote)代理
為一個位于不同的地址空間的對象提供一個局域代表對象。可以隱藏一個對象存在于不同地址空間的事實。這個不同的地址空間可以使在本機器中,也可是在另一臺機器中。遠程代理又叫做大使。
可以將網絡的細節隱藏起來,使得客戶端不必考慮網絡的存在。客戶完全可以認為被代理的對象是局域的而不是遠程的,而代理對象承擔了大部分的網絡通信工作。
2. 虛擬(Virtual)代理
代理對象可以在必要的時候才將被代理的對象加載。代理可以對加載過程加以必要的優化。當一個模塊的加載十分耗費資源的時候,虛擬代理的優點就非常明顯。
應用:
某個客戶端不能直接操作到某個對象,擔又必須和那個對象有所互動。
對于開銷很大的對象,只有在使用它是才創建,這個原則可以為為我們節省很多寶貴的內存資源。
3. 保護(Protect or Access)代理(安全代理)
可以在運行時對用戶的有關權限進行檢查,然后在核實后決定將調用傳遞給被代理的對象。
授權機制:不同級別的用戶對同一對象擁有不同的訪問權利。
4. 智能引用(Smart Reference)代理
當一個對象唄引用是,提供一些額外的曹鎖,比如講對此對象調用的次數記錄下來等。
5. Copy-on-Wright代理
虛擬代理的一種。把復制(克隆)拖延到只有在哭護短需要時,才真正采取行動。
6. Cache代理
為那些昂貴操作的結果提供臨時的存儲空間,一遍多個客戶端可以共享這些結果。
7. 防火墻(Friewall)代理
保護目標,不讓惡意用戶接近。
8. 同步化(Synchronization)代理
使幾個用戶能夠同時訪問目標對象而沒有沖突。
優點:
1.職責清晰。
2.高擴展性。
3.智能化。
缺點:
實現:
抽象主題
真正的主題 需要被保護的
package Proxy;public class RealSubject extends Subject {@Overridepublic void requestA() {// TODO Auto-generated method stubSystem.out.println("真實的請求A ");}@Overridepublic void requestB() {// TODO Auto-generated method stubSystem.out.println("真實的請求B");}@Overridepublic void requestC() {// TODO Auto-generated method stubSystem.out.println("真實的請求C ");}}代理主題
package Proxy;public class Proxy extends Subject{RealSubject Rs;public void requestA() {if(Rs==null)Rs=new RealSubject();Rs.requestA();};public void requestB() {if(Rs==null)Rs=new RealSubject();Rs.requestC();};public void requestC() {if(Rs==null)Rs=new RealSubject();Rs.requestC();}; }客戶端
package Proxy;public class Client {public static void main(String[] args) {Proxy proxy =new Proxy();proxy.requestA();proxy.requestB();proxy.requestC();} }總結
以上是生活随笔為你收集整理的『设计模式』小老弟你猜不透我?-- 代理模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么关闭win10自动更新 关闭win1
- 下一篇: 已备案域名购买要注意什么