I have been going back and forth between C# and Java for the last 8 years.
One thing that strikes me is that I have completely stopped using the "Template Method" design pattern in C#. Actually, in C# I Have come to think of this pattern as an anti-pattern.
http://en.wikipedia.org/wiki/Template_method_pattern
Coming back to Java, I find the pattern is alive and kicking. I still think it looks antique, but realise that there's no other way to do this in java. Java looks antique too ;)
Since this is going to come up anyway, Why is it an antipattern ?
- A lot of times it uses up your inheritance hierarchy for "the wrong reasons".
- Base classes have a tendency to become littered with all sorts of unerelated code.
- It forces you to lock down design, often quite early in the development process. (Premature lock down in a lot of cases)
- Changing this at a later stage becomes just harder and harder.
So with closures/delegates/function pointers, you normally pass around some function instead of subclassing.
So back to the question:
If your language has closures/delegates/function, do you use template method, and when ?