在过去的 8 年里,我一直在 C# 和 Java 之间来回穿梭。
让我印象深刻的一件事是我已经完全停止在 C# 中使用“模板方法”设计模式。实际上,在 C# 中,我已经开始将这种模式视为一种反模式。
http://en.wikipedia.org/wiki/Template_method_pattern
回到 Java,我发现这种模式是活生生的。我仍然认为它看起来很古老,但意识到在 java 中没有其他方法可以做到这一点。Java 看起来也很古老;)
既然这无论如何都会出现,为什么它是反模式?
- 很多时候,它会因为“错误的原因”耗尽你的继承层次结构。
- 基类倾向于散布各种不相关的代码。
- 它迫使您锁定设计,通常是在开发过程的早期阶段。(在很多情况下过早锁定)
- 在以后的阶段改变这一点变得越来越难。
因此,对于闭包/委托/函数指针,您通常会传递一些函数而不是子类化。
那么回到问题:
如果您的语言有闭包/委托/函数,您是否使用模板方法,何时使用?