反射机制

与世无争的帅哥 提交于 2019-12-09 15:43:58
  • 允许从类名字符串创建对象
    • JDBC驱动中的Class.forName(驱动类型名)就是一个最常见的例子
  • 允许选择对象的构造函数创建对象
  • 允许通过方法的字符串名称以及参数类型调用方法
  • 允许通过属性的字符串名称存取属性的值

反射机制的使用

  • 通过对前一阶段多种不同的语句类型的解码,可以发现一定规律:
    • 对于简单语句(parametric sentences),都是将语句分段之后,按照每段的不同类型进行解析,解析之后,保存属性值
    • 对于封装语句(encapsulation sentences)
      • 将语句分段,提取各个段的内容
      • 等待多语句组完成或超时未完成时,将有效载荷部分解码为比特数组
      • 将比特数组按照每个属性需要的比特位数以及不同的数据类型将比特数组编码为需要的类型
      • 设置属性的值
  • 编码部分的工作同样存在类似的规律
  • 一些额外需要考虑的问题
    • 属性必须保证顺序
    • 有些属性是必须有的,如果语句中不存在,需要终止解码
    • 有些语句中,有多组信息,例如GSV:http://www.gpsinformation.org/dale/nmea.htm#GSV

Annotation

  • Java支持对类(接口)、方法、属性加上annotation
  • 每个annotation可以定义自己的属性,例如序列号、属性是否必须存在等等
  • 因此可以通过annotation,将数据对象的属性进行标注
  • 在解码时,获取需要的属性,根据不同的属性类型进行解码,通过反射设置属性值

Chain of Responsibility模式

  • 责任链模式由一系列的command对象组成,在进行处理时,按照command对象的顺序逐步处理
  • 可根据command对象的执行情况决定终止执行或继续执行
  • Command模式决定了当执行一个command的时候,只能够完成一个小任务,但是当需要完成一系列任务时,需要使用责任链模式
  • 典型的责任链模式
    • Java Servlet的Filter,包括前处理Filter和后处理Filter,可以根据Filter的返回结果决定是否继续执行,例如通过添加权限处理的Filter,过滤对权限外的页面或操作的请求
    • MFC的消息处理模式,每个窗体对传来的消息进行处理,消息处理结束后,可根据处理结果继续处理或终止
    • Netty的channel处理,使用了类似于servlet filter的方式,只是更加巧妙

Singleton模式

  • 单例模式是在程序需要且仅需要创建一个对象时使用,单例模式决定了该类只能被实例化出一个对象,不能同时创建多个对象
  • 单例模式在Java中通常使用IoC框架来实现,例如Spring IoC中通过设置scope=singleon实现,而不通过代码实现
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!