最近はデザインパターンを学んでいます。プログラミングデザインパターンに関するドキュメントはたくさんありますが、クロージャーデザインパターンに興味があります。
JavaとGroovyのデザインパターンに関するVenkatSubramaniamのプレゼンテーションを見つけ、自分の経験に基づいて、クロージャを含むこのプレゼンテーションのパターンとその他のパターンを抽出しました。
実行方法
操作の前後に実行する必要がある操作のペア。
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ですが、同じ内容です):
クロージャーデザインパターン
クロージャーデザインパターン。Ruby版