您是否在使用闭包/委托/函数指针的编程语言中使用模板方法模式?

kro*_*old 7 delegates closures design-patterns functional-programming function

在过去的8年里,我一直在C#和Java之间来回走动.

令我印象深刻的是,我完全停止在C#中使用"模板方法"设计模式.实际上,在C#中我已经开始认为这种模式是一种反模式.

http://en.wikipedia.org/wiki/Template_method_pattern

回到Java,我发现这个模式还活着.我仍然认为它看起来很古老,但是我意识到在java中没有别的方法可以做到这一点.Java看起来也很古老;)

既然这会出现,为什么它是反模式?

  • 很多时候,由于"错误的原因",它会占用你的继承层次结构.
  • 基类有可能被各种不相关的代码弄乱.
  • 它会迫使您在开发过程中很早就锁定设计.(在很多情况下过早锁定)
  • 在稍后阶段改变这一点变得越来越难.

因此,对于闭包/委托/函数指针,您通常会传递一些函数而不是子类.

所以回到这个问题:

如果您的语言有闭包/委托/功能,您使用模板方法,何时?

Rob*_*uld 4

当我使用Java时,是的。但是对于具有“闭包/委托/函数”的语言,就我而言,Lua,不,我不再这样做了,相反,我越来越倾向于装饰模式来满足我的大多数需求。