



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java SE 065 静态代理模式深度剖析一、“Class” class众所周知Java有个Object class,是所有Java classses的继承根源,其内声明了数个应该在所有Java class中被改写的methods: hashCode()、equals()、clone()、toString()、getClass()等。其中getClass()返回一个Class object.Class class十分特殊。它和一般classes一样继承自Object,其实体用以表达Java程序运行时的classes和interfaces,也用来表达enum、array、primitive Java types(原生java类型,boolean,byte,char,short,int,long,float,double)以及关键词void。当一个class被加载,或当加载器class loader的defineClass()被jvm调用,JVM会自动产生一个Class object。如果你想借由“修改java标准库源码”来观察Class object的实际生成时机(例如在Class的constructor内添加一个println()),不能够!因为Class并没有public constructor.Class是Refelection起源。针对任何你想探堪的class,唯有先为它产生一个Class object,接下来才能经由后者唤起为数十多个的Reflection APIs.二、”Class” object的取得途径java允许我们从多种途径为一个class生成对应的Class object。Class object诞生管道示例运用getClass()注:每个class都有此函数String str =”abc”;Class c1 = str.getClass();运用Class.getSuperclass()Button b = new Button();Class c1 = b.getClass();Classs c2 = c1.getSuperclass();运用static methodClass.forName();(最常被使用)Class c1 = Class.forName(“java.lang.String”)Class c2 = Class.forName(“java.awt.Button”);Class c3 = Class.forName(“java.util.LinkedList$Entry”);Class c4 = Class.forName(“I”);Class c5 = Class.forName(“I”); 运用.class语法Class c1 = String.classClass c2 = java.awt.Button.classClass c3 = Main.InnerClass.classClass c4 = int.classClass c5 = int.class运用primitive wrapper classes的TYPE语法Class c1 = Boolean.TypeClass c2 = Byte.TYPEClass c3 = Character.TYPEClass c4 = Short.TYPEClass c5 = Integer.TYPEClass c6 = Long.TYPEClass c7 = Float.TYPE;Class c8 = Double.TYPEClass c9 = Void.TYPE三、代理模式(房屋中介租房)代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。代理模式一般涉及的角色有抽象角色(租房子):声明真实对象和代理对象的共同接口代理角色(中介):代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装真实角色(房主):代理角色所代表的真实对象,是我们要最终要引用的对象。package xy;/* * 代理模式抽象角色 * 代理角色与真实角色所拥有的共同接口。 * author x_xiongjie * */public abstract class Subject public abstract void request();package xy;/* * 真实角色 * 房主 * author x_xiongjie * */public class RealSubject extends Subject Overridepublic void request() System.out.println(From real subject!);package xy;/* * 代理角色 * author x_xiongjie * */public class ProxySubject extends Subject private RealSubject realSubject;/代理角色内部引用了真实角色Overridepublic void request() this.preRequest();/在真实角色操作之前所附加的操作if(null = realSubject)realSubject = new RealSubject();realSubject.request();/执行真实角色所完成的事情this.postRequest();/在真实角色操作之后所附加的操作。/增加代理角色自己可以完成的一些事情private void preRequest()System.out.println(pre request);private void postRequest()System.out.println(post request);package xy;public class Client public static void main(String args) Subject subject = new ProxySubject(); subject.request();struts2其实就是基于代理模式来的。解说:由以上代码可以看出,客户实际需要调用的是RealSubject类的request()方法,现在用ProxySubject来代理RealSubject类,同样达到目的,同时还封装了其他方法(preRequest(),postRequest()可以处理一些其他问题。另外,如果要使用上述的方法使用代理模式,那么真实角色必须是事先已经存在的,并将其作为代理对象的内部属性。但是实际使用时,一个真实角色必须对应一个代理角色,如果大量使用会导致类的急剧膨胀;如果事先不知道真实角色,该如何来使用代理呢?这个问题可以使用Java动态代理类来解决。代理类代理的真实角色在增加时,代理类也要同时增加,使用什么方式实现增加一个真实角色类,然后动态的为这个真实角色创建代理类呢?四、动态代理类Java动态代理类位于java.lang.reflect包下,一般主要涉及到以下两个类(1) Interface InvocationHandler:该接口中定义了一个方法public Object invoke(Object obj,Method method,Object args)在实际使用时,第一个参数obj一般指代理类,method是被代理的方法,如上例中的request()方法,args为该方法的参数数组。这个抽象方法在代理类中动态实现。解说:(每一个代理实例都会有一个与之关联的调用处理器,当我们调用某一个代理实例的某一个方法的时候,这个方法调用就会被编码,并且被派发到它的调用处理器的invoke方法上。)参数1:obj表示invoke方法是调用哪一个代理实例的方法。参数2: method对应于代理实例上的接口方法。参数3:args表示接口方法所需要接收的参数数组。(2)Proxy:该类即为动态代理类,作用类似于上例中的ProxySubject,其中主要包含以下内容。解说:用于创建动态代理类,它是动态代理类的父类。也就是说我们自己创建的动态代理类是Prox
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 音乐产业版权运营与虚拟现实:2025年长尾词视角下的科技创新探索报告
- 2025年新能源汽车充电设施在旅游景点的应用与发展报告
- 信号轨道电路施工方案
- 2024年医师定期考核模拟试题附完整答案详解(名师系列)
- 2025年度百色平果市马头镇卫生院招聘编外卫生专业技术人员考前自测高频考点模拟试题含答案详解(新)
- 酒店礼仪电子培训
- 福建省梅列第一实验学校2026届九年级英语第一学期期末学业质量监测试题含解析
- 2026届云南省玉溪市化学九上期末预测试题含解析
- 2026届保定市重点中学九年级英语第一学期期末联考试题含解析
- 2026届北京市清华大附属中学化学九年级第一学期期末教学质量检测模拟试题含解析
- 中国大模型落地应用研究报告2025
- ECMO课件大全教学课件
- 肿瘤病人血管通路的选择
- 2025年 北京门头沟大峪街道社区储备人才招募考试试题附答案
- 呼吸机管道安全管理体系
- 2025年重庆市中考英语试卷真题(含标准答案及解析)
- 档案公司借阅管理制度
- 药店医保考试试题及答案
- 2025年中考历史总复习中国古代史专题复习资料
- 单用途卡资金管理制度
- 雾化吸入治疗护理常规
评论
0/150
提交评论