文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
1.12 操控库模式
当我们需要更进一步增强库的功能时, 操控库模式(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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论