Groovy
探索之Delegate模式 二
鉴于Delegate模式在现在的编程中越来越重要,Groovy语言为它提供了一个帮助类来帮助我们创建委派类,这就是
DelegatingMetaClass
类。使用
DelegatingMetaClass
类,可以使得我们更加简单的实现
Delegate
模式。下面就来看看
DelegatingMetaClass
类是如何帮助我们实现
Delegate
模式的。
class
Foo {
def
test
()
{
println
'have a test'
}
def
foo()
{
println
'foo...'
}
}
import
org.codehaus.groovy.runtime.InvokerHelper
{
super
(aclass);
initialize()
}
public
Object invokeMethod(Object a_object,String a_methodName,Object[] a_arguments)
{
if
(a_methodName ==
'testAgain'
)
{
println
'test again'
return
''
}
else
{
super
.invokeMethod(a_object,a_methodName,a_arguments)
}
}
}
下面来测试我们刚刚生成的委派类:
def
invoker = InvokerHelper.instance
def
foo =
new
Foo()
foo.
test
()
foo.foo()
foo.testAgain()
“
FooDelegateingMetaClass”类的构造器参数是指动作(如“test”和“foo”)要委派到的目的类,在我们的例子中是“Foo”类。
有关MetaClass的一些知识,我们将单独提出来阐述,这里就不再说明。
运行上面的测试代码,可以得到如下的结果:
have a test
foo...
test again
def
invoker = InvokerHelper.instance
def
str =
"ok"
str.testAgain()
println
str
运行结果为:
test again
ok
比如有
Foo4
类如下:
class
Foo4 {
}
def
invoker = InvokerHelper.instance
def
foo =
new
Foo4()
foo.
test
()
foo.foo()
foo.testAgain()
运行看看:
have a test
foo...
test again
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。