2018-02-06 15:06:17 1173瀏覽
關(guān)于Java的代理模式不知道有多少的人了解,其實(shí)不論是參加Java培訓(xùn)還是自學(xué)Java,Java的代理模式都是Java學(xué)習(xí)中一個(gè)很重要的學(xué)習(xí)部分,本篇文章扣丁學(xué)堂小編就帶讀者們來(lái)看一下如何實(shí)現(xiàn)Java的代理模式。
代理模式的一種常見(jiàn)的實(shí)現(xiàn)方案是定義一個(gè)接口或抽象類,并派生出目標(biāo)子類,和代理子類。我們要操作的是目標(biāo)子類里的方法,而很多時(shí)候,我們需要為目錄子類中的方法增加額外的處理,如果增加日志功能、條件判斷等,這時(shí)候,就很有必要用到代理類。
/**
* 代理子類和目標(biāo)子類的公共接口
* @author rongxinhua
*
*/
public interface MyInterface {
public void doOperation();
}
/**
* 目標(biāo)子類
* @author rongxinhua
*
*/
public class RealClass implements MyInterface {
/**
* 我們要執(zhí)行的目標(biāo)方法
*/
@Override
public void doOperation() {
System.out.println("doOperation
");
}
}
而在沒(méi)有使用代理模式的情況下,我們是這樣執(zhí)行目標(biāo)方法的:
RealClass realObj = new RealClass();
realObj.doOperation(); //調(diào)用目標(biāo)方法
打印時(shí)輸出:
doOperation...
而我們要加入額外的處理的話,就可以使用代理類了:
/**
* 代理子類
* @author rongxinhua
*
*/
public class ProxyClass implements MyInterface {
private MyInterface realObj; //目標(biāo)子類對(duì)象
public ProxyClass(MyInterface realObj) {
this.realObj = realObj;
}
/**
* 調(diào)用目標(biāo)子類的方法,并在其中加入了前置處理和后置處理
*/
@Override
public void doOperation() {
doBefore();
realObj.doOperation();
doAfter();
}
/**
* 目標(biāo)方法調(diào)用前的相關(guān)處理
*/
private void doBefore() {
System.out.println("doBefore
");
}
/**
* 目標(biāo)方法調(diào)用后的相關(guān)處理
*/
private void doAfter() {
System.out.println("doAfter
");
}
}
有了代理類,我們可以這樣執(zhí)行目標(biāo)方法:
ProxyClass proxyObj = new ProxyClass(new RealClass());
proxyObj.doOperation(); //通過(guò)代理對(duì)象調(diào)用doOperation方法
打印時(shí)輸出:
doBefore...
doOperation...
doAfter...
關(guān)于Java的代理模式扣丁學(xué)堂小編就為大家簡(jiǎn)單說(shuō)以上這些,想要了解更多內(nèi)容的小伙伴可以登錄扣丁學(xué)堂官網(wǎng)查看??鄱W(xué)堂Java培訓(xùn)機(jī)構(gòu)不僅有專業(yè)的老師和與時(shí)俱進(jìn)的課程體系,還有大量的Java視頻教程供學(xué)員觀看學(xué)習(xí),想要了解學(xué)習(xí)Java的小伙伴快快行動(dòng)吧。Java技術(shù)交流群:670348138。
【關(guān)注微信公眾號(hào)獲取更多學(xué)習(xí)資料】
查看更多關(guān)于“Java開(kāi)發(fā)資訊”的相關(guān)文章>>