【Java】静态代理
来源:互联网 发布:mysql tar.gz安装 编辑:程序博客网 时间:2024/06/03 23:42
代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问。代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理。所以代理通常充当中间人的角色。
为了保持行为的一致性,代理类和委托类通常会实现相同的接口,所以在访问者看来两者没有丝毫的区别。
下面是一个用来展示(静态)代理结构的简单实例:
//相同的接口interface Interface{ void doSomething(); void somethingElse(String arg);}//委托类:class RealObject implements Interface{ public void doSomething(){ System.out.println("RealObject do something"); } public void somethingElse(String arg){ System.out.println("RealObject say : "+arg); }}//代理类:class SimpleProxy implements Interface{ private Interface proxy; public SimpleProxy(Interface proxy){ this.proxy = proxy; } public void doSomething(){ System.out.println("预处理委托类的消息。。。"); proxy.doSomething(); System.out.println("进行后续处理。。。"); } public void somethingElse(String arg){ System.out.println("代理说:"+arg); proxy.somethingElse(arg); }}public class SimpleProxyDemo { //客户端方法: public static void consumer(Interface iface){ iface.doSomething(); iface.somethingElse("hello!"); } public static void main(String[] args) { consumer(new RealObject()); System.out.println("----------------------"); //代理被插入到客户端与真实对象之间,代理就像“中间人”一样 consumer(new SimpleProxy(new RealObject())); }}
【程序输出】:
RealObject do somethingRealObject say : hello!----------------------预处理委托类的消息。。。RealObject do something进行后续处理。。。代理说:hello!RealObject say : hello!
tips:为了看得更清楚一些,委托类的输出我用英文表示,代理类我用中文表示。
通过上述程序及其输出,我们可以看到,代理类可以将额外的操作从委托类中分离出来。那么分离的目的是什么呢?
通过代理类这中间一层,能有效控制对委托类对象的直接访问,也可以很好地隐藏和保护委托类对象,同时也为实施不同控制策略预留了空间,从而在设计上获得了更大的灵活性。而且如果你想跟踪委托类中方法的方法的调用,或者度量这些调用的开销,那么这些代码肯定不希望合并带客户端的代码中去,因此代理使你更容易地添加或者移除它们。
1 0
- java代理静态代理
- Java代理之静态代理
- java代理模式---静态代理
- Java静态代理、动态代理
- java静态代理,动态代理
- Java静态代理动态代理
- Java 代理之静态代理
- JAVA代理模式--静态代理
- Java代理模式-静态代理
- java代理之静态代理
- Java代理(动态代理/静态代理)
- Java代理模式 静态代理 动态代理
- java实现静态代理
- java实现静态代理
- 静态代理--java
- java的静态代理
- JAVA静态代理
- java静态代理
- 我的收藏
- 文章标题
- 关于百度网盘的问题解答(帮助中心)
- Unity中的NavMeshAgent
- 如何提高 Java 中锁的性能
- 【Java】静态代理
- git 上传本地项目到github以及遇到的一些问题
- Html: 表单、文本域、单选按钮
- mongodb的安装和简单使用
- python-opencv 直方图目标区域匹配
- Facebook面试题 meeting rooms 求同时最多meeting room的时间
- Objective-c - 内存管理(ARC/MRC),第一个MRC程序
- 批量导入
- 二叉排序树的java实现