Java 中的 Transformer 设计模式

主要观点:

  • 介绍了 Transformer 模式,用于 Java 及可能其他具有特定类型参数的面向对象语言,可帮助子类型层次结构中的对象转换为任何类型的对象。
  • 讨论了在 Java 中实现 Transformer 模式的相关提案,包括在StringCharSequence上的transform方法,以及遇到的问题和解决方案。
  • 提出通过中间辅助类型TransformerTransformable接口来解决函数参数协变和逆变的问题,给出了示例实现和在CharSequenceString中的应用。
  • 讨论了性能方面,通过 JMH 基准测试证明额外的Transformer对象不会影响性能。
  • 总结认为Transformable可能过于“奢侈”,但对TransformerTransformable的总体想法很有吸引力。

关键信息:

  • String.transform方法通过给定函数对自身进行操作,可用于链式调用工具方法。
  • CharSequence上定义transform方法时存在问题,Java 不支持逆变参数类型。
  • 通过中间接口TransformerTransformable,在两个单独声明中实现协变指定逆变边界。
  • CharSequenceString中应用Transformer模式的方式,包括实现接口和修改返回类型。
  • 性能测试表明额外的Transformer对象不会在堆上分配,不影响性能。

重要细节:

  • Transformer接口定义为@FunctionalInterface,包含一个带有泛型方法by的函数式接口。
  • Transformable接口用于提醒子类实现者和用户关于transformed方法的相关操作。
  • CharSequenceString中的实现细节,如CharSequence扩展TransformableString实现transformed方法等。
  • 性能测试中创建了String的简单包装类进行基准测试,比较了不同调用方式的性能。
  • Filterer模式进行了比较,指出两者的相似性和差异。
  • 提到标记为@FunctionalInterface的接口在使用 lambda 表达式时有限制,但方法引用不受影响。
阅读 2
0 条评论