返回介绍

1.12 操控库模式

发布于 2025-01-04 00:44:55 字数 1220 浏览 0 评论 0 收藏 0

当我们需要更进一步增强库的功能时, 操控库模式(Pimp my Library Pattern) 提供了一种扩展库的方法。它的假定条件是我们并没有库的源码。

1.12.1 范例

假设现在想使用 Groovy 中内建的整数工具(建立于 Java 中已存在的功能)。这些库已经拥有我们需要的大部分功能。由于可能没有所有的库源码,所以不能只改变库,而要扩充库。Groovy 可以采用多种方法来实现这一点,其中一个方法就是使用类别。

首先定义一个适合的类别。

class EnhancedInteger {
  static boolean greaterThanAll(Integer self, Object[] others) {
    greaterThanAll(self, others)
  }
  static boolean greaterThanAll(Integer self, others) {
    others.every { self > it }
  }
}

添加了两个方法,它们通过提供 greaterThanAll 方法扩充了整数方法。类别遵守着一定的规范,它们被定义为静态方法,并利用特殊的第一个参数来代表我们希望扩展的类。静态方法 greaterThanAll(Integer self, others) 成为 greaterThanAll(other) 的实例方法。

现在已经定义了两种 greaterThanAll 。其中一个适用于集合、范围等类型,另一个则适用于一些 Intege 参数。

该类别的使用方法如下:

use(EnhancedInteger) {
  assert 4.greaterThanAll(1, 2, 3)
  assert !5.greaterThanAll(2, 4, 6)
  assert 5.greaterThanAll(-4..4)
  assert 5.greaterThanAll([])
  assert !5.greaterThanAll([4, 5])
}

如你所见,通过这种技术,在无需访问源码的情况下,我们可以高效地丰富原始类。更进一步地是,我们不但可以为系统的不同部分应用不同的改进,而且还可以在需要时利用未增强的对象。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文