The Template Method Pattern abstracts away the details of several algorithms. The generic part of an algorithm is contained within a base class. Particular implementation details are captured within base classes. The generic pattern of classes involved looks like this:
In this example,
Accumulator captures the essence of the accumulation algorithm. The base classes
Product provide particular customised ways to use the generic accumulation algorithm.
The resulting output is:
In this particular case, you could use Groovy's inject method to achieve a similar result using Closures:
Thanks to duck-typing, this would also work with other objects which support an add (
plus() in Groovy) method, e.g.:
We could also do the multiplication case as follows:
Using closures this way looks more like the Strategy Pattern but if we realise that the built-in
inject method is the generic part of the algorithm for our template method, then the Closures become the customised parts of the template method pattern.