使用代理模式之前需要知道代理模式能做什么? 能有哪些好处以及为什么要用代理模式.
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);
}
}
结果如下:
业务处理之前需要执行的方法.
业务处理核心方法
业务处理之后需要执行的方法.
返回结果:处理方法.