更新時間:2021-08-10 13:48:24 來源:動力節(jié)點 瀏覽1297次
動態(tài)代理設(shè)計模式:為所有功能一致的業(yè)務(wù)操作接口提供統(tǒng)一的代理處理操作
代理設(shè)計模式的核心是有真實業(yè)務(wù)實現(xiàn)類與代理業(yè)務(wù)實現(xiàn)類,代理類會完成比真實業(yè)務(wù)更多的處理邏輯。
傳統(tǒng)代理設(shè)計模式的弊端:所有的代理設(shè)計模式如果按照設(shè)計要求來講,必須是基于接口的設(shè)計。而靜態(tài)代理設(shè)計的特點在于:一個代理類只為一個接口服務(wù)。這也是問題所在。
java提供的動態(tài)代理實現(xiàn)
//主體接口
interface ISubject{
public void eat(String food,int num);
}
//真實操作類
class Subject implements ISubject{
@Override
public void eat(String food, int num) {
System.out.println("吃了"+num+"份"+food);
}
}
//動態(tài)代理類[偽代理],想使用動態(tài)代理必須實現(xiàn)此接口
class ProxySubject implements InvocationHandler{
private Object target;
//動態(tài)代理綁定真實業(yè)務(wù)對象 返回動態(tài)代理對象
public Object bind(Object target){
this.target = target;
return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
}
public void eatParpre(){
System.out.println("準備食物");
}
public void eatClear(){
System.out.println("吃完啦,刷盤子");
}
//Spring的Aop核心就是使用的動態(tài)代理
//method存儲的是真實業(yè)務(wù)對象的方法對象[eat方法對象]
//args參數(shù) 此處應(yīng)該是我傳遞的 "雞腿", 20 看下圖
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
this.eatParpre();
//使用反射調(diào)用核心業(yè)務(wù)方法
Object ret = method.invoke(target, args);
this.eatClear();
return ret;
}
}
public class ProxyTest {
public static void main(String[] args) {
//調(diào)用
ISubject subject = (ISubject)new ProxySubject().bind(new Subject());
//subject調(diào)用eat的時候會觸發(fā)代理對象調(diào)用invoke方法,在invoke方法里使用反射調(diào)用真實業(yè)務(wù)方法
subject.eat("雞腿", 20);
}
}
運行結(jié)果:
準備食物
吃了20份雞腿
吃完啦,刷盤子
例子場景:打架
如:
桃花島比武搶親之戰(zhàn) —— 郭靖與歐陽克
華山論劍正邪之戰(zhàn) —— 北丐洪七公和西毒歐陽峰
小朋友夢想之戰(zhàn) —— 奧特曼與鎧甲勇士
…
這些戰(zhàn)斗之中,都要打架,但是打架之前需要有一些前期準備,打架(實戰(zhàn))工作由目標對象實現(xiàn),而前期的準備(練功)工作則由代理對象實現(xiàn)。
以上就是動力節(jié)點小編介紹的"動態(tài)代理設(shè)計模式",希望對大家有幫助,想了解更多可查看Java設(shè)計模式。動力節(jié)點在線學(xué)習(xí)教程,針對沒有任何Java基礎(chǔ)的讀者學(xué)習(xí),讓你從入門到精通,主要介紹了一些Java基礎(chǔ)的核心知識,讓同學(xué)們更好更方便的學(xué)習(xí)和了解Java編程,感興趣的同學(xué)可以關(guān)注一下。
0基礎(chǔ) 0學(xué)費 15天面授
有基礎(chǔ) 直達就業(yè)
業(yè)余時間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)
初級 202925
初級 203221
初級 202629
初級 203743