代理设计模式用法广泛,平时接触的最多的就是Spring的AOP了,实际就是动态代理的实现。那怎么做呢?
一、定义接口
public interface Subject {
public void doSomething();
}
二、定义实际对象,即被代理对象
public class RealSubject implements Subject {
@Override
public void doSomething() {
System.out.println("RealSubject");
}
}
三、业务代理类
public class ProxyHandler implements InvocationHandler {
private Object object;
public ProxyHandler(Object object) {
this.object = object;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
//在转调具体目标对象之前,可以执行一些功能处理
System.out.println("Before");
//转调具体目标对象的方法
method.invoke( this.object, args);
//在转调具体目标对象之后,可以执行一些功能处理
System.out.println("After");
return null;
}
}
四、客户端
public class DynamicProxy {
public static void main(String[] args) {
RealSubject real = new RealSubject();
Subject proxySubject = (Subject) Proxy.newProxyInstance(Subject.class.getClassLoader(), new Class[]{Subject.class}, new ProxyHandler(real));
proxySubject.doSomething();
}
}