一、理解
代理模式(Proxy),爲其他對象提供一種代理以控制對這個對象的訪問。從模式的命名我們就可以意識到,應該是通過一個類代替另一個類進行相關的操作,類似於使用者的意思。“你授權給我使用你的功能,我可以在這個地方代替你行事相應的功能”,值得注意的是,代理行使的功能其實就是功能所有者的功能。以下是代理模式的功能圖:
那就有人會問,我既然能使用某各類的功能,我爲什麼要多此一舉,找一個代理類行使功能呢?那麼這就涉及了代理模式的應用,其實代理模式的應用很廣泛,它大致有以下幾種應用。第一,就是遠程代理,也就是一個對象在不同地址空間提供局部代代表,這樣就可以隱藏一個對象存在不同地址空間的事實、就比如你在.NET的Web應用中引用WebService,此時就會在項目中生成一個WebReference的文件和一些文件夾,其實這些就是代理,使得客戶端只要調用代理,就可以解決遠程訪問的問題。第二,就是虛擬代理,就是根據需要創建開銷很大的對象,通過它來存放實例化需要時間很長的對象,這樣就能達到性能的最優化。第三,就是安全代理,用來控制真實對象訪問時的權限,一般用於對象有不同訪問權限的時候。第四,就是智能指引,是指當調用真實對象時,代理處理另一些事情。
二、實現
public abstract class Subject {
public abstract void Request();
}
public class RealSubject extends Subject {
@Override
public void Request() {
// 真實需求的操作
}
}
public class Proxy extends Subject {
RealSubject realSubject;
@Override
public void Request() {
if(realSubject == null) {
realSubject = new RealSubject();
}
realSubject.Request();
}
}
public class Main {
public static void main(String[] args) {
Proxy proxy = new Proxy();
proxy.Request();
}
}