java代理模式

来源:互联网 发布:杭州市行知幼儿园招聘 编辑:程序博客网 时间:2024/05/16 18:14

1.什么是代理模式


2.java代理模式实现demo

首先定义好接口Subject

package proxy;public interface Subject {public void request();public void response();}

接着实现类RealSubject 继承Subject 接口

package proxy;public class RealSubject implements Subject {@Overridepublic void request() {System.out.println("I am the request method!");}@Overridepublic void response() {System.out.println("I am response method!");}}

接着创建动态代理类DynamicSubject实现InvocationHandler接口

package proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;public class DynamicSubject implements InvocationHandler {private Object sub;public DynamicSubject(Object obj) {this.sub = obj;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {System.out.println("before : " + method);//在方法前执行method.invoke(sub, args);System.out.println("after : " + method);//在方法后执行return null;}}
最后测试类如下

package proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Proxy;import org.junit.Test;public class TestProxy {@Testpublic void TestDynamicProxy() {RealSubject realSubject = new RealSubject();InvocationHandler handler = new DynamicSubject(realSubject);// .getInterfaces() 返回本类直接实现的接口.不包含泛型参数信息Subject subject = (Subject) Proxy.newProxyInstance(handler.getClass().getClassLoader(), realSubject.getClass().getInterfaces(),handler);//subject.request();subject.response();}}

运行测试类结果如下
before : public abstract void proxy.Subject.request()I am the request method!after : public abstract void proxy.Subject.request()before : public abstract void proxy.Subject.response()I am response method!after : public abstract void proxy.Subject.response()

3.代理模式主要有哪些应用场景

1)webservice远程代理

如在一个web项目中来一些外部引用,添加一些WebReference和文件,这些文件就是远程web工程的引用,

2)虚拟代理

如用一些虚拟对象代理一些实例化需要很长时间,开销很大的文件,如你打开一个HTML文件,可能文字会很快的显示出来,但图片你却的等它慢慢的一张一张下载,这时候图片框其实就是一个代理对象,代理了真实图片的位置和尺寸.

3)安全控制

最经典的,什么最危险的事都是替身干的

0 0
原创粉丝点击