Java代理(一) 背景介绍

来源:互联网 发布:php开源网站统计系统 编辑:程序博客网 时间:2024/05/20 16:40
概念
为某个对象提供一个代理,以控制对这个对象的访问。 代理类和委托类有共同的父类或父接口,这样在任何使用委托类对象的地方都可以用代理对象替代。
代理类负责请求的预处理、过滤、将请求分派给委托类处理、以及委托类执行完请求后的后续处理。
为了保持行为的一致性,代理类和委托类通常会实现相同的接口,所以在访问者看来两者没有丝毫的区别。通过代理类这中间一层,能有效控制对委托类对象的直接访问,也可以很好地隐藏和保护委托类对象,同时也为实施不同控制策略预留了空间,从而在设计上获得了更大的灵活性。


从图中可以看出,代理接口(Subject)、代理类(ProxySubject)、委托类(RealSubject)形成一个“品”字结构。
事例
比如 场景是完成数据库的查询,并且记录查询前后花的时间
那么,从设计上
代理接口 subject是一个interface 提供查询数据库的操作,并不实现
委托类 realSubject 实现数据库的连接,查询,断开
代理类,在调用委托类之前,记录查询开始时候,调用之后,记录查询结束时间,打印出花费的时间


分类
按照代理的创建时期,代理类可以分为两种:
静态:由程序员创建代理类或特定工具自动生成源代码再对其编译。在程序运行前代理类的.class文件就已经存在了。
动态:在程序运行时运用反射机制动态创建而成。
原创粉丝点击