代理模式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