代理模式的一種常見的實現(xiàn)方案是,定義一個接口或抽象類,并派生出目標子類,和代理子類。我們要操作的是目標子類里的方法,而很多時候,我們需要為目錄子類中的方法增加額外的處理,如果增加日志功能、條件判斷等,這時候,就很有必要用到代理類。
/**
* 代理子類和目標子類的公共接口
* @author rongxinhua
*
*/
public interface MyInterface {
public void doOperation();
}
/**
* 目標子類
* @author rongxinhua
*
*/
public class RealClass implements MyInterface {
/**
* 我們要執(zhí)行的目標方法
*/
@Override
public void doOperation() {
System.out.println("doOperation
");
}
}
而在沒有使用代理模式的情況下,我們是這樣執(zhí)行目標方法的:
RealClass realObj = new RealClass();
realObj.doOperation(); //調(diào)用目標方法
打印時輸出:
doOperation
而我們要加入額外的處理的話,就可以使用代理類了:
/**
* 代理子類
* @author rongxinhua
*
*/
public class ProxyClass implements MyInterface {
private MyInterface realObj; //目標子類對象
public ProxyClass(MyInterface realObj) {
this.realObj = realObj;
}
/**
* 調(diào)用目標子類的方法,并在其中加入了前置處理和后置處理
*/
@Override
public void doOperation() {
doBefore();
realObj.doOperation();
doAfter();
}
/**
* 目標方法調(diào)用前的相關(guān)處理
*/
private void doBefore() {
System.out.println("doBefore
");
}
/**
* 目標方法調(diào)用后的相關(guān)處理
*/
private void doAfter() {
System.out.println("doAfter
");
}
}
有了代理類,我們可以這樣執(zhí)行目標方法:
ProxyClass proxyObj = new ProxyClass(new RealClass());
proxyObj.doOperation(); //通過代理對象調(diào)用doOperation方法
打印時輸出:
doBefore
doOperation
doAfter
本文只是代理模式的在Java中的簡單使用,而代理模式與Java反射機制的整合,為Java組件開發(fā)增加了強大的生命力,有興趣的朋友可看我另一個博客中的文章:
探討代理模式與Java反射機制的應用。
本文原創(chuàng),轉(zhuǎn)載請注明出處,謝謝!http://www.tkk7.com/rongxh7(心夢帆影JavaEE技術(shù)博客)
posted on 2010-03-31 16:00
心夢帆影 閱讀(5849)
評論(2) 編輯 收藏 所屬分類:
JavaSE