...
Groovy allows the traditional style of applying the delegation pattern, e.g. see Replace Inheritance with Delegation.In addition, the ExpandoMetaClass
Implement Delegation Pattern using ExpandoMetaClass
The ExpandoMetaClass allows usage of this pattern to be encapsulated in a library. This allows Groovy to emulate similar libraries available for the Ruby language.
...
| Code Block |
|---|
delegator.delegateAll borrowAmount:'getMoney', borrowFor:'getThing' |
Implement Delegation Pattern using @Delegate annotation
Since version 1.6 you can use the built-in delegation mechanism which is based on AST transformation.
This make delegation even easier:
| Code Block |
|---|
class Person {
def name
@Delegate MortgageLender mortgageLender = new MortgageLender()
}
class MortgageLender {
def borrowAmount(amount) {
"borrow \$$amount"
}
def borrowFor(thing) {
"buy $thing"
}
}
def p = new Person()
assert "buy present" == p.borrowFor('present')
assert "borrow $50" == p.borrowAmount(50)
|