优点:动态代理模式相比于静态代理模式更灵活
动态代理模式不用显示的让它与真实主题类实行相同的接口,而是把这种实现推迟到了运行时。
一个典型的动态代理模式可以分为三个步骤
public class DynProxyObj implements InvocationHandler{
private Object obj;
public DynProxyObj(Object obj){
this.obj = obj;
}
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object object = method.invoke(obj, args);
return object;
}
}
1.通过实现InvocationHandler接口创建自己的调用处理器I n vocationHandlerhandler = new InvocationHandlerImpl(被代理对象);
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
Teacher tea = new Teacher("小张");
DynProxyObj dpo = new DynProxyObj(tea);
//动态代理实现
Subject dyn = (Subject)Proxy.newProxyInstance(tea.getClass().getClassLoader(),tea.getClass().getInterfaces() , dpo);
dyn.teach();
}
}
2、通过构造函数创建代理类实例,此时需将调用处理器对象作为参数被传入
3、通过Interface对象执行指定事物