演化架构与紧急设计: 语言、表达性与设计:第 2 部分
2009-11-05 00:00:00 来源:WEB开发网logger = new GenericLowerDecorator(
new TimeStampingLogger(
new Logger()))
logger.log('IMPORTANT Message')
使用此修饰符调用的任何方法都将只使用小写字符串:
Tue May 22 07:27:18 EST 2007: important message
注意,时间戳并未使用小写形式,而 String 参数变为了小写形式。这可以在 Java 语言中实现但非常困难。事实上,使用视点(比如说通过 AspectJ)是在 Java 语言中实现此效果的唯一方法。要获取这种类型的修饰符,您必须切换为另一个带有独立编译器的语言,并为您的 Java 代码设置后期处理。虽然说并不是不可能,但其流程可能会是难以想象的麻烦。
适配器模式
四人组的书将适配器模式定义为:
将某个类的接口转换为接口客户所需的类型。适配器允许各类共同工作(由于接口不兼容,因为无法通过其他方式实现此目的)。
如果您使用过 Swing 中的事件处理程序,则应该对适配器模式有一定的了解。它用于围绕包含多个方法的事件处理接口创建适配器类,这样您就不需要创建自己的类,实现接口,以及导入大量空方法。Swing 适配器允许您子类化适配器,并且可以仅重写处理事件所需的方法。
Groovy 中的适配
从根本上说,适配器模式尝试解答的问题是:“我能否让这个方形木条适合这个圆孔?”这正是本文将要解决的问题。我将使用两个不同的实现,分别强调了表达性对于各语言的重要性。第一个实现将使用 Groovy;清单 9 给出了相关的三个类和一个接口:
清单 9. 方形木条和圆孔interface RoundThing {
def getRadius()
}
class SquarePeg {
def width
}
class RoundPeg {
def radius
}
class RoundHole {
def radius
def pegFits(peg) {
peg.radius <= radius
}
String toString() { "RoundHole with radius $radius" }
}
更多精彩
赞助商链接