浅析java代理模式

来源 :计算机光盘软件与应用 | 被引量 : 0次 | 上传用户:ctbt010
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要:本文基于JAVA语言对静态和动态代理做出了分析,并且进行了实现,对以后理解JAVA的JDK和 Cglib包提供的代理服务打下基础。
  关键词:设计模式;静态代理;动态代理
  中图分类号:TP393.02
  代理模式是一个非常重要的设计模式,不但我们自己在设计程序的时候经常用到,很多著名的框架如Spring、Hibernate等都用到了代理模式,因此理解并且学会灵活使用代理模式就非常必要。
  代理模式的定义:对其他对象提供一种代理以控制对这个对象的访问。简单地说,代理类具有和被代理类一样的方法,调用者通过调用代理类的方法间接调用了被代理类相同名字的方法,对于调用者来说,它不用察觉自己调用的是代理类的方法,感觉上仍然在调用被代理类的方法。对于被代理类来说,代理类可以在调用其方法前后做其他工作,比如写日志等。按照代理的创建时期,代理类可以分为两种:静态代理类:在程序运行前,由程序员创建再编译成.class文件;动态代理类:在程序运行时,运用反射机制动态创建而成。
  1 静态代理
  静态代理类:由程序员创建或由特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。静态代理原理就是聚合+多态。
  1.1 静态代理
  静态代理模式有三个角色:抽象接口、代理类、被代理类。其它类通过访问代理类来访问被代理类。
  1.2 静态代理的实现
  (1)建一个抽象接口
  public interface Subject {
  public void print(String words);
  }
  (2)建一个被代理类,需要实现抽象接口
  public class RealSubject implements Subject{
  public void print(String words) {
  System.out.println("被代理人郭襄说:"+words);
  }
  }
  (3)建一个代理类,需要实现抽象接口
  public class ProxySubjectimplements Subject{
  private Subject s;
  public ProxySubject(Subject s){
  this.s=s;
  }
  public void print(String words) {
  System.out.println("我是代理,我名字叫黄蓉!");
  s.print(words);
  System.out.println("黄蓉代理完毕!");
  }
  }
  (4)建一个客户端程序测试,关键代码如下:
  Subject sub1=new RealSubject();
  Subject sub2=new ProxySubject(sub1);
  sub2.print("你好!");
  运行输出:我是代理,我的名字叫黄蓉!;被代理的人郭襄说:你好!;黄蓉代理完毕。从输出可以看出,在真实对象的print方法被调用前后,代理对象都做了其他操作。对于客户端来说,它只对接口Subject编程,提高了代码的可维护和可升级性。
  2 动态代理
  动态代理类:就是其代理类是在程序运行时,运用反射机制动态创建而成,并不需要像靜态代理那样子事先要编写好代理类。如果有多重代理,就要写多个代理类,还有如果一个类有多个方法都需要代理的话,就更加使得代码很臃肿,不易维护,这个时候就需要动态地来生成代理类,这就是动态代理。
  2.1 动态代理
  动态代理模式至少要有6个角色:(1)抽象接口;(2)被代理类;(3)处理器接口;(4)自定义的处理器(实现处理器接口);(5)生成成代理类的类;(6)代理类(由第5点的类通过反射技术自动生成)。
  2.2 动态代理的实现
  (1)首先建一个抽象接口
  public interface Subject {
  public void print();
  }
  (2)建一个被代理类,需要实现Subject接口
  public class RealSubject implements Subject{
  publicvoid print() {
  System.out.println("被代理人郭襄");
  }
  }
  (3)建一个处理接口
  public interface InvocationHandler {
  public Object invoke(Object proxy, Method method)throws Exception;
  }
  (4)建一个用户自定义的处理器,需要实现处理接口
  在invoke()方法里写上被代理类的方法调用前后要进行的动作。这个invoke()方法我们不用直接调用,是让将来自动生成的代理类去调用的。invoke()方法关键代码如下:
  System.out.println("我是代理人郭靖,开始代理");
  method.invoke(delegate);
  System.out.println("我是代理人郭靖,代理完毕");   (5)建生成代理类的类,主要是运用java的反射技术和jdk的编译工具生成代理类对象并加载到内存里面,代码比较复杂,这里不再详细描述。
  (6)编写测试客户端,关键代码如下
  Subject sub1=newRealSubject();
  LogHandler hander=newLogHandler();
  Subject sub2=(Subject)hander.bind(sub1);
  sub2.print();
  输出结果:我是代理人郭靖;开始代理;被代理的人郭襄;我是代理人郭靖,代理完毕。从结果可以看出,代理成功,并且自动生成了代理类$Proxy.java文件,并成功实现了代理的效果。
  2.3 动态代理的优势
  动态代理的明显好处上面就体现出来了:对于同一个对象的所有方法,如果对所有方法都是相同的处理逻辑,只需要写一次处理逻辑就行;对于同一个抽象接口,不同的对象,如果对所有对象的相同名字的方法具有相同的处理逻辑(同一个对象,不同方法的处理逻辑可以不同),也只需要写一次处理逻辑就行,只需要写一次处理器类即可;如果某一天,那个方法的处理逻辑被改变了,只需要改动一次即可,如果是静态代理,每个代理类下的相对应的方法的处理逻辑都要改动一次,维护非常困难。
  3 结束语
  代理模式可以运用在如下这些方面:(1)用于在程序调用前后记录相关日志及其他附加操作;(2)用于某些操作前的安全及權限的验证等保护操作;(3)用于创建对象,也叫虚代理,对于某些大对象,在真正需要它的时候,运用代理模式去创建;(4)使得同一对象被多个客户同时访问不产生冲突。
  我们可以灵活使用代理模式,配合其他模式的使用,如工厂模式,使我们的程序更加高内聚、低耦合,而且非常优雅。
  参考文献:
  [1]陈丁山.设计模式的研究与应用[J].电脑知识与技术(学术交流),2007(23).
  [2]周凤丽,邵平凡,万程鹏.设计模式在B/S开发中的应用[J].科技创业月刊,2005(12).
  作者简介:黄冲(1986.07-),男,广东湛江人,本科,助理工程师,研究方向:计算机。
  工作单位:广东金融学院,广州 510521
其他文献
摘 要:软件本地化最主要的是用户界面的本地化,用户界面的资源文件有多种,同种资源文件又会涉及不同的内容(对话框、菜单、字符串)。这些文件在翻译过程中必须遵循一定的规范。本文主要介绍了软件源语言文件包中各种常见的在本地化过程中需要处理的用户界面文件及在本地化的操作过程中所要注意的问题。  关键词:本地化;用户界面;源文件;翻译  中图分类号:H059  软件是按照特定顺序组织的计算机程序代码、文档和
期刊
摘 要:本文首先简要介绍了RH精炼炉的处理过程及对安全性的要求,然后设计出了集成监控系统的网络结构,并针对网络结构的三个层次中的冗余技术及具体实现方式进行了详细说明,最后结合具体应用实践,给出了系统的应用效果。  关键词:冗余系统;PLC;通讯;计算机监控;过程控制系统;通讯链路  中图分类号:TP393.02  RH(真空循环脱气)钢水精炼炉主要是对转炉、LF炉出钢后的钢水进行脱气、脱碳、成分控
期刊
摘 要:随着科学技术的发展,当前图书资料管理手段日趋先进,伴随着集中式数据库技术在管理系统中的广泛运用,其诸多不足也日益显露出来。针对该不足之处,不少企业进行内部管理机制改革,由传统的集中式数据库管理技术转变为分布式数据库技术。分布式数据技术的应用,极大程度的弥补了集中式管理系统的缺陷。本文以图书资料管理系统中分布式数据库技术的实际应用为例,在阐释分布式数据库技术的应用现状的基础之上,分析其优点,
期刊
摘 要:随着现代计算机网络信息技术的不断发展,计算机网络已经成为了我们生活当中的重要组成部分。但是在计算机网络迅速发展的背景下其信息安全问题值得人们深思。本文主要对现阶段计算机网络信息安全所面临的问题进行了分析,在此基础上阐述了完善计算机网络信息安全的相关防护策略。  关键词:计算机;信息;防护  中图分类号:TP399  在计算机技术和互联网计算高速发展的背景下,对于整个社会的科学、经济以及文化
期刊
摘 要:社会对计算机专业人才的要求越来越高。文中主要针对计算机应用技术专业存在的问题,提出要准确定位专业办学方向、完善课程体系、加强高素质教学团队建设、改进教学模式、加强校内外实训平台建设等途径提高专业学生的职业能力。  关键词:计算机应用技术;师资队伍;职业能力  中图分类号:TP3-4  2012年7月,国务院发布了《“十二五“国家战略性新兴产业发展规划》,使信息网络产业、电子核心基础产业、高
期刊
【摘要】:呼和浩特职业学院根据学院的发展需求,以“构建优质网络平台,打造精品数字校园”为建设总目标,自2009年起,利用三年时间建设并完善1个平台、3个中心、1个体系,即基于校园网的软硬件基础平台,依托该平台的数据中心、信息服务中心、共享型教学资源中心和保障体系。建设一流的信息化网络环境,信息化教学资源,信息化教学与学习环境,信息化管理手段和工作环境,实现了信息化学习、信息化教学、信息化科研和信息
期刊
摘 要:培养优秀的应用型本科人才,就不能仅仅按照书本僵硬的进行教育,要具有新时代的特征,有开创性,积极探索,追求与时代同步,对人才进行特色化教育。该文以计算机专业人才威力,简述应用型人才培养,包括课程体系的完善,师资科研水平的提升,教学体系的优化,校企结合的相关措施,如何增加学生的动手机会等,从多方面简述应用性人才应如何培养,以培养更多地对国家有用的优秀应用性人才。  关键词:计算机专业;应用型本
期刊
摘 要:本文以数学形态学基本运算的介绍为基础,阐述了图像处理中常见的一些数学形态学方面的应用,其中有形态学图像重建、形态学图像滤波和形态学图像梯度。最后介绍了一种基于形态学的图像分割算法—分水岭算法,并以基于标记的分水岭分割算法为例,研究了形态学运算在图像分割前的预处理步骤和图像分割中帮助提取标记的作用,由此证明了数学形态学运算是图像处理领域中的一种有效方法和手段。  关键词:图像分割;形态学;分
期刊
摘 要:广电网络通过ZTE中兴MSTP传输网组建IP OVER SDH专线客户专网问题解决方案。通过修改330的SFE为透传模式,320为虚拟局域网模式,用户口和系统口均设置为接入模式,并设置相应的PVID的方式,实现了用户网络的正常通信。  关键词:广电网络;MSTP传输网;专线组网;接入模式;干线模式;透传模式;IP OVER SDH  中图分类号:TN915.63  某专线客户通过我公司的Z
期刊
摘 要:随着计算机水平在不断的提高,其应用的领域也在逐渐的扩展,本文主要研究了JAVA程序,在函数之间的调用关系中,更好的研究程序理解,其中在函数之间中,它往往代表的是一种具体功能或者是问题求解的实现,最终构建了函数调解图,来促进程序的理解。本文研究了集中函数调用图,针对其优缺点,最终提出了一种函数调用图的构建方法。  关键词:程序理解;函数调用图;构建  中图分类号:TP311.10  在研究计
期刊