Java 代理模式之一:静态代理

代理模式Proxy Pattern,是Java23种设计模式之一,也是比较重要的一种。

本文以小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

你可能感兴趣的:(java,设计模式,代理模式,静态代理)