闭包应用模式:
1.策略模式:
def function (Closure clo) {
for (i in 1..n) {
clo(i)
}
}
function { i->
println i**2
}
function { i->
println i**3
}
2.闭包参数:
def closure = {Date d,String str-> //TODO}
closure new Date(),"String"
3.模板方法模式:
class Resouces {
def open() {}
def write() {}
def read() {}
def close() {}
def static use(Resources r,Closure clo) {
try {
r.open()
clo(r)
r.close()
} catch(ex) {}
}
}
def res = new Resources()
Resources.use {r,{r->r.write()}}
Resources.use {r,{r->r.read()}}
4.闭包参数
Closure.maximumNumberOfParameters 表示参数个数
Closure.parameterTypes 表示闭包参数类型
5.闭包参数
owner:代表闭包的外层包如果没有,就是闭包本身
this:永远指向闭包最外层的类
delegate:闭包委托类
6.闭包调用
a.closure()
b.closure.call()
7.闭包在集合类中的应用
any(Closure):判断是否存在
every(Closure):判断是否每个都是
collect(Closure):遍历整个集合,通过Closure里面的算法替换集合里的元素
<span style="font-family:Helvetica Neue;">def result = [1,2,3,4].collect {
i->i**2
}
println result // [1,4,9,16]</span>
8.闭包作为返回值
def multiply(x) {
return {y->return x*y}
}