Revision: 5019
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at February 5, 2008 17:40 by narkisr
Initial Code
// the decorated class package design.patterns.decorator class Logger { def log(text) { println(text) } } // the naive implementation package design.patterns.decorator class LowerCaseLogger extends Logger { def logger LowerCaseLogger(log) { logger = log } def log(text) { logger.log(text.toLowerCase()) } public static void main(String[] args) { def logger = new LowerCaseLogger(new Logger()) logger.log('HELLO DECORATION') } } // the more general implementation package design.patterns.decorator class GenericLowerLogger { private delegate GenericLowerLogger(delegate) { this.delegate = delegate } def invokeMethod(String name, args) { def newargs = args.collect {arg -> if (arg instanceof String) return arg.toLowerCase() else return arg } delegate.invokeMethod(name, newargs) } public static void main(String[] args) { def logger = new GenericLowerLogger(new Logger()) logger.log('HELLO DECORATION')// hello decoration } }
Initial URL
Initial Description
Decorator design pattern implemented in Groovy, two implementation are provided, the first is naive and not general, the second is MOP based and can be used in much more scenarios.
Initial Title
Decorator Design Pattern Groovy
Initial Tags
design, groovy
Initial Language
Groovy