Java 代理模式之一:靜態代理

代理模式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);
	}
}
輸入結果:
this is a proxy
proxy begin
-------------
-------------
this is a enProxy class
-------------
-------------
proxy end
ProxyObject 求和...
ObjectsImpl 求和...
9
相關文章
相關標籤/搜索