前提
不知道大家是否看過《大話設計模式》,其中大話設計模式中講代理模式的故事感覺還是很搞笑的,自己想追求女朋友,但卻請朋友代勞,結果變成了朋友和期待的女朋友在一起。唉,這還是說明有些事情還是需要自己勇敢出擊才能得到,否則是人财兩空啊。其實小故事中卻講述了一個代理模式的機制。
何為代理模式?
所謂的代理模式就是在原有服務上多加一個占位,通過占位去控制服務的通路。通過為其他對象提供一種代理以控制對這個對象的通路。
例子
假如是自己是一位工程師,提供技術幫助,公司有一位客服,不懂技術,此時有一位使用者,需要公司提供技術服務,此時使用者隻能聯系客服溝通,而不是直接找工程師,再由客服根據公司的規章制度和業務規則和業務規則決定是否來找工程師服務。此時客服就是一個代理,客戶隻能通過客服代理通路工程師。站在使用者的角度,隻需要認識客服就行了。站在工程師的角度,隻需認為客服代表公司,不用管工程師是如何為使用者服務的。
調用機制
用圖形來代表代理模式

調用方式UML圖
代碼實踐
public interface Subject {
void Request();
}
//真實對象
public class RealSubject implements Subject {
@Override
public void Request() {
System.out.println("我是真實的對象");
}
}
//代理對象
public class Proxy implements Subject {
@Override
public void Request() {
System.out.println("##########################");
System.out.println("我是代理對象,關聯真實對象");
RealSubject realSubject = new RealSubject();
System.out.println("調用真實對象的方法");
System.out.println("###################################");
realSubject.Request();
}
}
//調用
public class client {
public static void main(String[] args) {
Proxy proxy = new Proxy();
proxy.Request();
}
}
為什麼要用代理模式?
1、通過代理模式可以控制如何通路真正的服務對象提供額外的服務。
2、可以通過重寫一些類滿足特定的需要
代理模式應用場景
1、遠端代理,為一個對象在不同的位址空間提供局部代表,隐藏一個對象存在于不同位址空間的事實
2、虛拟代理,根據需要建立開銷很大的對象,通過它存放執行個體化需要很長時間的真實對象
3、安全代理,用于控制真實對象通路時的權限
4、智能指引,調用真實對象時,代理處理另外一些事