SOに関するこの質問に注意を引いたとき、私はデザインパターン、特にテンプレートメソッドについて読んでいました。
説明と特定のコードを読んだ後でも、なぜこれが「テンプレート メソッド」デザイン パターンの例なのか疑問に思っています。
GoF によると、このパターンの意図は次のとおりです。
「いくつかのステップをサブクラスに任せて、操作でアルゴリズムのスケルトンを定義します。テンプレート メソッドを使用すると、アルゴリズムの構造を変更することなく、サブクラスでアルゴリズムの特定のステップを再定義できます。」</p>
2 人の参加者がいます。
AbstractClass :
- 具体的なサブクラスがアルゴリズムのステップを実装するために定義する抽象プリミティブ操作を定義します
- アルゴリズムのスケルトンを定義するテンプレート メソッドを実装します。テンプレート メソッドは、AbstractClass で定義された操作や他のオブジェクトの操作だけでなく、プリミティブ操作も呼び出します。
ConcreteClass :
アルゴリズムのサブクラス固有のステップを実行するためのプリミティブ操作を実装します。
「JdbcOperations」のコードが「テンプレート メソッド」設計パターンと見なされるのはなぜですか?
- 「JmsTemplate」などの同様のファイルのコードと比較しても、「グローバル/一般」アルゴリズムがスーパー/抽象クラスで定義されていることはわかりません。
- 具象クラスに実装されている関数は、スーパー クラスでも定義されていません。定義されたすべてのメソッドは、インターフェース (この場合はインターフェース「JdbcOperations」) を使用して追加されますが、親のメソッドを実際にオーバーライドするものはありません。
ボイラープレート コードを削除するのに非常に便利で あることがわかりました。しかし、なぜこれは単なる気の利いたコーディング トリックではなく、テンプレート メソッドなのでしょうか。私には、テンプレート メソッドが持つ特性を共有していないように見えます。