代理模式Proxy Pattern,是Java23種設計模式之一,也是比較重要的一種。 java
本文以小Demo爲例,註釋中講解靜態代理。 設計模式
接口類:package com.andy.proxy.statis; /** * * @包名 :com.andy.proxy<br> * @文件名 :Object.java<br> * @類描述 :業務接口<br> * @做者 :Andy.wang<br> * @建立時間 :2012-12-27下午05:42:14<br> * @更改人 :<br> * @更改時間 :<br> */ public interface Object { void action(); int sum(int x,int y); }
接口實現類: 測試
package com.andy.proxy.statis; /** * * @包名 :com.andy.proxy.statis<br> * @文件名 :ObjectsImpl.java<br> * @類描述 :業務接口實現類<br> * @做者 :Andy.wang<br> * @建立時間 :2013-8-26下午03:07:47<br> * @更改人 :<br> * @更改時間 :<br> */ public class ObjectsImpl implements Object { public void action() { System.out.println("-------------"); System.out.println("-------------"); System.out.println("this is a enProxy class"); System.out.println("-------------"); System.out.println("-------------"); } public int sum(int x, int y) { System.out.println("ObjectsImpl 求和..."); return (x + y); } }代理類:
/** * 靜態代理:靜態代理不具有具體實現能力(只知道能幹什麼,卻不關心怎麼幹), * 所以靜態代理類必須和業務接口實現類同樣繼承接口,要申明一個接口 * 實現類對象來調用方法。<br> * * 缺陷:每個代理類只能爲一個接口服務,這樣一來程序開發中必然會產生過多的代理, * 並且,全部的代理操做除了調用的方法不同以外,其餘的操做都同樣,則此時確定是重複代碼。 */ package com.andy.proxy.statis; /** * * @包名 :com.andy.proxy.statis<br> * @文件名 :ProxyObject.java<br> * @類描述 :靜態代理類<br> * @做者 :Andy.wang<br> * @建立時間 :2013-8-26下午03:08:03<br> * @更改人 :<br> * @更改時間 :<br> */ public class ProxyObject implements Object { Object obj; public ProxyObject() { System.out.println("this is a proxy"); obj = new ObjectsImpl(); } public void action() { System.out.println("proxy begin"); obj.action(); System.out.println("proxy end"); } public int sum(int x, int y) { System.out.println("ProxyObject 求和..."); return obj.sum(x + 1, y + 1); } }測試類:
package com.andy.proxy.statis; /** * * @包名 :com.andy.proxy.statis<br> * @文件名 :TestProxy.java<br> * @類描述 :靜態代理測試類<br> * @做者 :Andy.wang<br> * @建立時間 :2013-8-26下午03:08:14<br> * @更改人 :<br> * @更改時間 :<br> */ public class TestProxy { public static void main(String[] args) { Object obj = new ProxyObject(); obj.action(); int sum = obj.sum(3, 4); System.out.println(sum); } }輸入結果: