演化架构与紧急设计: 语言、表达性与设计:第 1 部分
2009-09-12 00:00:00 来源:WEB开发网而且 Groovy 支持外部迭代器(也称为 pull 迭代器,因为必须请求集合中的下一项),如清单 3 所示。这与内置到 Java 语言自身中的迭代器是完全一样的。
清单 3. pull 迭代器
iterator = numbers.iterator()
while (iterator.hasNext()) {
println iterator.next()
}
因为迭代器太常见了,所以它根本就算不上是正式的模式;它只是一种语言的特性。这在计算机语言自身的紧急设计中非常常见。
命令模式
四人组的书将命令模式定义为:
将请求压缩为对象,使您能用不同的请求,队列或日志请求,参数化客户机,并支持可撤销的操作。
Java 语言中这种模式的常见实现是创建 Command 类,该类包含 execute() 方法。命令设计模式作为代码块出现在 Groovy 中,是定义在独立的花括号({ 和 })中的任何东西。不强制您创建新类和相应方法,您可以通过调用其 call() 方法或通过在包含代码块(带有或没有参数)的变量名后放置括号来执行代码块。清单 4 显示了示例:
清单 4. Groovy 中带有代码块的命令模式
def count = 0
def commands = []
1.upto(10) { i ->
commands.add { count++ }
}
println "count is initially ${count}"
commands.each { cmd ->
cmd()
}
println "did all commands, count is ${count}"
支持撤销
在类似匿名内部类的机制中使用代码块的一个优势是其简洁性。因为指定可撤销的操作是一个常见需求,所以这个语法变得很重要。查看清单 5 中的 Groovy 代码,它显示了如何使用代码块和命令设计模式配合支持可撤销的操作:
更多精彩
赞助商链接