设计模式笔记之重新研读Java语言(2)

2.重新研读Java语言

2.1 说明

   本章介绍的Java语言特性主要包括:

  1. Package包
  2. Generics泛型
  3. Annotation标注
  4. Enum枚举

   它们对于提高代码扩展性、灵活性很有帮助。

 

2.2 Java部分语法内容扩展

2.2.1 规划和组织代码——包

      好的包结构规划使工程化代码与非工程化代码最直观的一个区别。《Java语言编码规范》。

   包使用域名反写的小写字母,各选项介绍如下:

  1. app代表项目或产品
  2. framework:代表组织级的通用开发框架。
  3. util:公司自主开发的各种工具
  4. tutorial:完全面向培训用途,示例程序。

2.2.2 正式命名的常量契约——枚举

   当选择是否使用枚举时,建议套用如下规则判断:一系列常量具有明确的业务、技术含义,且预期在系统生命周期内不会变化。

2.2.3 考验算法的抽象能力——泛型

1.抽象及抽象能力支持

   Java为我们提供的抽象能力

  1. Class:提供了对现实世界的抽象能力
  2. Interface:提供了对Class行为的抽象
  3. Annotation:对类型元数据的抽象
  4. Generics:给上述因素进N步的抽象。

 

2.应用于模式

   项目中,随着模式的实现方式和使用方法逐步固定,可以用泛型对算法的数据结构进行抽象,进而提高算法的的实用性。

 

3.容器

   泛型的另一个主要用途是建立各种强类型的容器,也就是集合类型,类型参数用于定义容器中具体元素的类型。

   相对于一般的泛型类型而言,泛型对集合类型的意义更重要,因为:接口和参数更明确,而且不仅仅停留在UML的图纸上,在编码和调用过程中都起到刚性的检查作用。

 

4.类型参数约束

   类型参数的约束作用除了体现在控制实例化过程外,还有如下注意事项:

  1. 当类成员使用类型参数时,该类型参数的约束也同样适用于相关成员。
  2. 设计每一个类型的时候,要根据客户程序的需求,反复斟酌类型参数约束。
  3. 对于集合类型,尽可能不要在生产代码中出现无约束的参数类型。

 

5.小结

   如果代码被反复重用,只要进度允许,建议尽量使用泛型,因为:

  1. 省去开发人员猜来猜去,可以提高开发效率。
  2. 抽象给代码带来更多的适应性。
  3. 减少接口和参数的歧义。
  4. 锻炼开发者的抽象能力。

  

2.2.4 用贴标签的方式扩展对象特性——标注

   实际工程中,标注常常会和反射、配置一同使用。对于设计模式,标注同样可以从很多方面对类型进行扩展,减少客户端程序使用的复杂度。例如:

  1. 把状态模式中的状态类型声明为标注
  2. 把各类代理类型需要的控制特征通过标注体现出来。

2.3 面向插件架构的配置系统设计

   工程化代码和玩具代码另一个最大的区别就是有关配置的处理。

   本书配置文件主要用来登记需要动态加载的类型,采用jdk的XML类解析.xml配置文件。布局上,采用如下方式:

  1. 每个模式定义一个配置节
  2. 配置节定义一个OCM的基类ConfigSeciton,而各模式具体的OCM类均在继承ConfigSection的基础上进一步扩展,类名与模式名一致。
  3. 所有配置节有列入一个名为的配置文件组,它表示本系列各册配置内容的根节点。
  4. 配置节组下增设一个名为的配置节,专门定义为每个模式所使用的OCM类型。

 

 

2.4 依赖注入

   采用依赖注入的方式将加工好的抽象类型示例“注入”到客户程序中。

2.4.1 构造注入

   这种注入方式是在构造函数的执行过程中,将抽象类型作为参数传递给客户类型。

2.4.2 设置注入

   相对于构造注入方式而言,设值注入给了客户类型后续修改的机会,比较适用于客户类型实例存活时间较长的场景。

2.4.3 接口注入

   接口注入是将抽象类型的入口以方法定义在一个接口中,如果客户类型需要获得这个方法,就需要以实现这个接口的方式完成注入。

2.5 连贯接口(Fluent Interface)

   连贯接口方法的的要点:

  1. 每个连贯方法的返回值都是一个类型实例,但不一定是其本身。

你可能感兴趣的:(设计模式(Java))