动态代理模式总结
2016-07-07 21:34
337 查看
优点:动态代理模式相比于静态代理模式更灵活
动态代理模式不用显示的让它与真实主题类实行相同的接口,而是把这种实现推迟到了运行时。
一个典型的动态代理模式可以分为三个步骤
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接口创建自己的调用处理器InvocationHandlerhandler = 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对象执行指定事物
动态代理模式不用显示的让它与真实主题类实行相同的接口,而是把这种实现推迟到了运行时。
一个典型的动态代理模式可以分为三个步骤
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接口创建自己的调用处理器InvocationHandlerhandler = 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对象执行指定事物
相关文章推荐
- 能量项链(codevs 1154)
- vim:隆重推荐括号补全插件--auto-pairs
- Codevs (3657括号序列 )
- Android第一行代码笔记<2>
- Minimum Cut
- 2014多校联盟 第一场 Task 贪心
- Ubuntu 下打开txt文件乱码的方法
- Android第一行代码笔记<1>
- Android BLE学习笔记
- 烧脑的sql语句(头脑风暴)
- 深圳市注册新公司的流程
- CTF 【每日一题20160701】breakpoint(未解决)
- Ubuntu 下安装mysql
- Python学习-环境搭建
- linux内核中断分析
- go语言学习
- 下拉菜单
- LoadRunner测试Google Suggest
- this指针在类成员函数中用法
- 操作系统引导--从实模式到保护模式