这些天我正在学习设计模式。有很多关于编程设计模式的文档,但我对闭包设计模式很感兴趣。
我找到了 Venkat Subramaniam 关于Java 和 Groovy 中的设计模式的演示文稿,并根据我自己的经验提取了该演示文稿中涉及闭包和其他模式的一些模式。
执行环绕方法
操作前后需要执行的一对操作。
def operations(closure) {
println "Open"
closure()
println "Close"
}
operations { println "Operation" }
===> Open
===> Operation
===> Close
可插拔行为
指定对象在运行时的行为。
def selectValues(number, closure) {
def list = []
1.upto(number) {
if (closure(it)) list << it
}
return list
}
assert [2, 4, 6, 8, 10] == selectValues(10) { it % 2 == 0 } // even
assert [1, 3, 5, 7, 9] == selectValues(10) { it % 2 != 0 } // odd
迭代器模式
允许顺序访问元素。
def listNumbers(closure) {
(0..5).each { closure it }
}
listNumbers {
if (it < 3) println "$it is a little number"
else println "$it is a big number"
}
===> 0 is a little number
===> 1 is a little number
===> 2 is a little number
===> 3 is a big number
===> 4 is a big number
===> 5 is a big number
动态条件执行
创建并执行条件操作。
def greet(user, successClosure, failClosure) {
if (isAdmin(user)) successClosure()
else failClosure()
}
greet(user, { println "Hi Admin!" }, { println "Hello User" })
我想了解更多闭包设计模式。有没有关于这个话题的参考?随意用你最喜欢的编程语言编写一个新模式。
更新
我写了一篇关于这个主题的帖子(Groovy 和 Ruby,但内容相同):
闭包设计模式
闭包设计模式。红宝石版