代理模式
原始定義:Proxy pattern provides a surrogate or placeholder for another object in order to controll access to it
甯看懂了嗎?
翻譯:代理模式就是給某一個對象(被代理對象proxyee)提供一個“替身”或者“占位符”來達到控制這個對象的目的。
我注:也就是說,相比于之前我們直接操作這個對象(proxyee),我們通過操作代理對象(proxyer)來間接的操作proxyee。 這下懂了吧親?
靜态代理
從字面了解,就是有另一個人代替了你去做了本來你應該做的事情(在代碼中其實還是你自己做的,這裡先不管具體誰做的)。
靜态代理模式的優點:
- 在不改變原有代碼的前提下增加功能
-
幫助你了解AOP
靜态代理模式的缺點:
- 代理類必須實作被代理類實作的接口,一旦被代理類的功能增加,會牽扯到代理類的代碼。
這裡用一個例子來解釋靜态代理的流程和代碼。
我們假設你是蔡徐坤的經紀人,蔡徐坤自己跳舞是賺不到錢的,隻有你接到業務讓他跳舞他才有收入。
首先我們先建立一個功能接口叫做(如果對這裡為什麼要使用interface而不是class有疑問,這裡是java程式設計的慣例,一般來講,功能使用接口,實體使用類)
public interface talent{
void dance();
void sing();
}
然後我們建立出蔡徐坤,并且實作了他的天賦(talent 接口)
public class CaiXuKun implements talent{
@override
public void dance(){
system.out.println("我是來自美國校隊的拉拉隊隊長,跳麻溜的");
}
@override
public void sing(){
system.out.println("雞你太美");
}
}
然後我們讓蔡徐坤自己表演下才藝(單獨運作下他的方法)
public class TestCaixukun {
public static void main(String[] args) {
CaiXuKun caiXuKun = new CaiXuKun();
caiXuKun.sing();
caiXuKun.dance();
}

然後發現他沒有收到錢!!!!!
現在的重點來了,我們要使用經紀人來代理業務了,建立一個代理對象就叫做ProxyManager吧
public class ProxyManager implements talent{
CaiXuKun target; //這裡我們需要一個CaiXuKun的執行個體來保證還是caixukun本人在跳舞!!!!
public void setTarget(CaiXuKun target) {
this.target = target;
}
@Override
public void dance() {
System.out.println("跳舞收費五十塊 ,請交錢!");//這裡就是我們添加的功能了!!!并且我們沒有動CaiXuKun的代碼!
target.dance();
}
@Override
public void sing() {
System.out.println("蔡徐坤唱歌收費五十塊,請交錢!!!");//這裡就是我們添加的功能了!!!并且我們沒有動CaiXuKun的代碼!
target.sing();
}
}
在這裡使用代理類運作一下
public class TestCaixukun {
public static void main(String[] args) {
ProxyManager proxyManager = new ProxyManager();
CaiXuKun caiXuKun = new CaiXuKun();
proxyManager.setTarget(caiXuKun);
proxyManager.dance();
proxyManager.sing();
}
}
我們就成功了增加了功能了!!!! 你看懂了嗎!!!
現在你回頭看上面 代理模式的優點,映象應該會深刻和具體一點