使用代理模式之前需要知道代理模式能做什么? 能有哪些好处以及为什么要用代理模式.
Proxy模式又叫做代理模式,是构造型的设计模式之一,它可以为其他对象提供一种代理(Proxy)
以控制对这个对象的访问。所谓代理,是指具有与代理元(被代理的对象)具有相同的接口的类,客户端必须通过代理与被代理的目标类交互,而代理一般在交互的过程中(交互前后),进行某些特别的处理
下面是一个动态代理的实例:
package pack.java.proxy; /** * 主题接口; * @ClassName: Subject * @Description: TODO(这里用一句话描述这个类的作用) * @author Administrator * @date 2015-4-28 * */ public interface Subject { /** * 业务处理方法; * @Title: process * @Description: TODO(这里用一句话描述这个方法的作用) * @Params * @throws */ String process(); }
建立一个实现接口的方法:
package pack.java.proxy; /** * 实现主题接口 * @ClassName: RealSubject * @Description: TODO(这里用一句话描述这个类的作用) * @author Administrator * @date 2015-4-28 * */ public class RealSubject implements Subject{ @Override public String process() { before(); System.out.println("业务处理核心方法"); after(); return "处理方法."; } private void before(){ System.out.println("业务处理之前需要执行的方法."); } private void after(){ System.out.println("业务处理之后需要执行的方法."); } }
建立一个用于代理处理类:
package pack.java.proxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; /** * 动态代理; * @ClassName: ProxyHander * @Description: TODO(这里用一句话描述这个类的作用) * @author zhouhaitao * @date 2015-4-28 * */ public class ProxyHander implements InvocationHandler { private Subject subject; public void setSubject(Subject subject) { this.subject = subject; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //动态调用; Object obj = method.invoke(subject, args); return obj; } }
建立一个测试类,用于测试结果:
package pack.java.proxy; import java.lang.reflect.Proxy; public class MainClass { /** * @Title: main * @Description: TODO(这里用一句话描述这个方法的作用) * @Params * @throws */ public static void main(String[] args) { ProxyHander proxyHander = new ProxyHander(); Subject subject = new RealSubject(); //设置要代理的对象; proxyHander.setSubject(subject); //实例化代理类; Subject sub = (Subject)Proxy.newProxyInstance(RealSubject.class.getClassLoader(),RealSubject.class.getInterfaces(),proxyHander); String str = sub.process(); System.out.println("返回结果:"+str); } }
结果如下:
业务处理之前需要执行的方法.
业务处理核心方法
业务处理之后需要执行的方法.
返回结果:处理方法.