Java的代理模式(通過公共介面實現)
代理模式的一種常見的實現方案是,定義一個介面或抽象類,並派生出目標子類,和代理子類。我們要操作的是目標子類裡的方法,而很多時候,我們需要為目錄子類中的方法增加額外的處理,如果增加日誌功能、條件判斷等,這時候,就很有必要用到代理類。
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->/**
* 代理子類和目標子類的公共介面
* @author rongxinhua
*
*/
public interface MyInterface {
public void doOperation();
}
* 代理子類和目標子類的公共介面
* @author rongxinhua
*
*/
public interface MyInterface {
public void doOperation();
}
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->/**
* 目標子類
* @author rongxinhua
*
*/
public class RealClass implements MyInterface {
/**
* 我們要執行的目標方法
*/
@Override
public void doOperation() {
System.out.println("doOperation");
}
}
* 目標子類
* @author rongxinhua
*
*/
public class RealClass implements MyInterface {
/**
* 我們要執行的目標方法
*/
@Override
public void doOperation() {
System.out.println("doOperation");
}
}
而在沒有使用代理模式的情況下,我們是這樣執行目標方法的:
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--> RealClass realObj = new RealClass();
realObj.doOperation(); //呼叫目標方法
realObj.doOperation(); //呼叫目標方法
列印時輸出:
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->doOperation
而我們要加入額外的處理的話,就可以使用代理類了:
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->/**
* 代理子類
* @author rongxinhua
*
*/
public class ProxyClass implements MyInterface {
private MyInterface realObj; //目標子類物件
public ProxyClass(MyInterface realObj) {
this.realObj = realObj;
}
/**
* 呼叫目標子類的方法,並在其中加入了前置處理和後置處理
*/
@Override
public void doOperation() {
doBefore();
realObj.doOperation();
doAfter();
}
/**
* 目標方法呼叫前的相關處理
*/
private void doBefore() {
System.out.println("doBefore");
}
/**
* 目標方法呼叫後的相關處理
*/
private void doAfter() {
System.out.println("doAfter");
}
}
* 代理子類
* @author rongxinhua
*
*/
public class ProxyClass implements MyInterface {
private MyInterface realObj; //目標子類物件
public ProxyClass(MyInterface realObj) {
this.realObj = realObj;
}
/**
* 呼叫目標子類的方法,並在其中加入了前置處理和後置處理
*/
@Override
public void doOperation() {
doBefore();
realObj.doOperation();
doAfter();
}
/**
* 目標方法呼叫前的相關處理
*/
private void doBefore() {
System.out.println("doBefore");
}
/**
* 目標方法呼叫後的相關處理
*/
private void doAfter() {
System.out.println("doAfter");
}
}
有了代理類,我們可以這樣執行目標方法:
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--> ProxyClass proxyObj = new ProxyClass(new RealClass());
proxyObj.doOperation(); //通過代理物件呼叫doOperation方法
proxyObj.doOperation(); //通過代理物件呼叫doOperation方法
列印時輸出:
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->doBefore
doOperation
doAfter
doOperation
doAfter
本文只是代理模式的在Java中的簡單使用,而代理模式與Java反射機制的整合,為Java元件開發增加了強大的生命力.
相關文章
- java幾種代理模式的實現方式Java模式
- 通過 ProxyChains-NG 實現終端代理AI
- 通過API介面實現圖片上傳API
- Java的通過管道來實現執行緒通訊Java執行緒
- Java代理設計模式(Proxy)的四種具體實現:靜態代理和動態代理Java設計模式
- 【Golang】Go 通過結構(struct) 實現介面(interface)GolangStruct
- 通過釋出訂閱模式實現的事件委託模式事件
- Java 中的代理模式Java模式
- JavaScript代理模式,怎麼實現物件的動態代理?JavaScript模式物件
- ccf 公共鑰匙盒 java實現Java
- java 實現 最長公共子序列Java
- 初探Java設計模式2:結構型模式(代理模式,介面卡模式等)Java設計模式
- 設計模式--介面卡模式/代理模式設計模式
- 重學 Java 設計模式:實戰代理模式「模擬mybatis-spring中定義DAO介面,使用代理類方式運算元據庫原理實現場景」Java設計模式MyBatisSpring
- Go 實現常用設計模式(九)代理模式Go設計模式
- 設計模式學習筆記(七)代理模式以及動態代理的實現設計模式筆記
- Java的三種代理模式Java模式
- 通過佇列實現棧OR通過棧實現佇列佇列
- Java通過SSLEngine與NIO實現HTTPS訪問JavaHTTP
- Java設計模式—代理模式Java設計模式
- Java設計模式-代理模式Java設計模式
- 設計模式總結——代理模式以及java的動態代理設計模式Java
- 設計模式學習-使用go實現代理模式設計模式Go
- Java通過Mybatis實現批量插入資料到Oracle中JavaMyBatisOracle
- Java中的代理模式(Proxy Pattern)Java模式
- Java中的三種代理模式Java模式
- Java 設計模式(四)《代理模式》Java設計模式
- Java設計模式之代理模式Java設計模式
- LRU 實現 通過 LinkedHashMapHashMap
- 通過模板實現POI
- Java靜態代理模式Java模式
- Java類關係之代理(代理模式)Java模式
- Java的介面卡模式Java模式
- org.reflections 介面通過反射獲取實現類原始碼研究反射原始碼
- SAP ABAP和Java的動態代理實現Java
- 實現通過COM元件方式實現java呼叫C#寫的DLL檔案的完整demo元件JavaC#
- Mybatis之介面程式設計--JAVA動態代理的最佳展現MyBatis程式設計Java
- 重學 Java 設計模式:實戰介面卡模式Java設計模式
- 本地Mac通過堡壘機代理實現跨堡壘機scp問題Mac