java代理设计模式
来源:互联网 发布:工信部大数据认证 编辑:程序博客网 时间:2024/06/06 20:07
代理设计模式分为两种,一种为动态代理,另外一种为静态代理。其中动态代理应用的比较广泛,如spring的AOP(面向切面编程)等等。。。下面简单的来介绍下这种模式的区别:
1. 静态代理:
在代理类中手动提供所有需要被代理的对象
优点: -->可以在执行功能前后添加额外功能,增加了程序的可扩展性
-->无法直接获取到所代理类,增加了被代理类的安全性
缺点: -->运行效率上降低
-->无法直接获取到被代理的类,增加了复杂性
public class FangDong {public void chuzufang(){System.out.println("我要出租一个一室一厅的房子");}}
动态代理:由Proxy动态代理所需要代理的对象,由运行时指定。
提供InvocationHandler接口的实现类(调用接口,执行每个被代理对象的方法时,执行InvocationHandler中invoke方法)
public class ZhongJie implements InvocationHandler{
//被代理对象
private Object obj;
public ZhongJie(Object obj){
this.obj = obj;
}
/**
* proxy:代理对象,新产生的代理对象
* method:所代理的方法
* args:代理方法的参数
*
* 返回值:Object,返回原方法的返回内容。
*/
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("收取房东中介费");
Object result= method.invoke(obj, args);
System.out.println("收取个人中介费");
return result;
}
}
要求被代理对象,必须提供对应接口
public interface FangDongDao {
void chuzufang();
}
public class FangDong implements FangDongDao{
public void chuzufang(){
System.out.println("我要出租一个一室一厅的房子");
}
}
加载对应的内容
ClassLoader:类加载器,负责加载类,然后才能实例化
Class:类类型
public class Mine {
public static void main(String[] args) {
//1.Invocationhandler对象
InvocationHandler handler = new ZhongJie(new FangDong());
//2.产生被代理对象
FangDongDao fangdong = (FangDongDao) Proxy.newProxyInstance(FangDongDao.class.getClassLoader(), new Class[]{FangDongDao.class}, handler);
fangdong.chuzufang();
}
}
- java 代理设计模式
- java代理设计模式
- java 代理设计模式
- Java设计模式:代理
- Java代理设计模式
- java设计-代理模式
- Java代理设计模式
- Java代理设计模式
- java代理设计模式
- java--代理设计模式
- java设计模式-代理模式
- Java设计模式-----代理模式
- java设计模式-代理模式
- java设计模式---代理模式
- java设计模式---代理模式
- java设计模式---代理模式
- Java设计模式-代理模式
- Java 设计模式 代理模式
- 【牛腩】-css核心内容
- 2017.8.3------数独
- C++课程设计报告--通讯录管理系统
- ubuntu 常见错误--Could not get lock /var/lib/dpkg/lock
- PHP之文件下载
- java代理设计模式
- centos6.8 安装VNC桌面
- 剑指offer之从尾到头打印链表
- 黑匣子_NOI导刊2010提高(06) 洛谷p1801
- 欢迎使用CSDN-markdown编辑器
- HALCON学习之Features详解
- luogu P1970 花匠 (NOIP)
- TCP/IP 基础
- 数据结构实验之串二:字符串匹配