私は過去 8 年間、C# と Java の間を行ったり来たりしてきました。
私が驚くべきことの 1 つは、C# での "テンプレート メソッド" デザイン パターンの使用を完全にやめたことです。実際、C# では、このパターンをアンチパターンと考えるようになりました。
http://en.wikipedia.org/wiki/Template_method_pattern
Java に戻ると、このパターンは生きていて素晴らしいものであることがわかります。まだアンティークに見えると思いますが、Java でこれを行う方法は他にないことに気付きました。Javaもアンティークに見えます;)
これはとにかく出てくるので、なぜそれはアンチパターンなのですか?
- 多くの場合、「間違った理由」で継承階層を使い果たします。
- 基本クラスには、あらゆる種類の無関係なコードが散らばる傾向があります。
- 多くの場合、開発プロセスのかなり早い段階で、設計をロックダウンする必要があります。(多くの場合、時期尚早のロックダウン)
- 後の段階でこれを変更すると、ますます難しくなります。
したがって、クロージャー/デリゲート/関数ポインターを使用すると、通常、サブクラス化する代わりに関数を渡します。
質問に戻ります。
あなたの言語にクロージャー/デリゲート/関数がある場合、テンプレート メソッドを使用しますか? また、いつ使用しますか?