4

SOに関するこの質問に注意を引いたとき、私はデザインパターン、特にテンプレートメソッドについて読んでいました。

説明と特定のコードを読んだ後でも、なぜこれが「テンプレート メソッド」デザイン パターンの例なのか疑問に思っています。

GoF によると、このパターンの意図は次のとおりです。

「いくつかのステップをサブクラスに任せて、操作でアルゴリズムのスケルトンを定義します。テンプレート メソッドを使用すると、アルゴリズムの構造を変更することなく、サブクラスでアルゴリズムの特定のステップを再定義できます。」</p>

2 人の参加者がいます。

AbstractClass :
- 具体的なサブクラスがアルゴリズムのステップを実装するために定義する抽象プリミティブ操作を定義します
- アルゴリズムのスケルトンを定義するテンプレート メソッドを実装します。テンプレート メソッドは、AbstractClass で定義された操作や他のオブジェクトの操作だけでなく、プリミティブ操作も呼び出します。
ConcreteClass :
アルゴリズムのサブクラス固有のステップを実行するためのプリミティブ操作を実装します。


「JdbcOperations」のコードが「テンプレート メソッド」設計パターンと見なされるのはなぜですか?

  • 「JmsTemplate」などの同様のファイルのコードと比較しても、「グローバル/一般」アルゴリズムがスーパー/抽象クラスで定義されていることはわかりません。
  • 具象クラスに実装されている関数は、スーパー クラスでも定義されていません。定義されたすべてのメソッドは、インターフェース (この場合はインターフェース「JdbcOperations」) を使用して追加されますが、親のメソッドを実際にオーバーライドするものはありません。

ボイラープレート コードを削除するのに非常に便利で あることがわかりました。しかし、なぜこれは単なる気の利いたコーディング トリックではなく、テンプレート メソッドなのでしょうか。私には、テンプレート メソッドが持つ特性を共有していないように見えます。

4

3 に答える 3

1

JdbcTemplateドキュメントによると

JDBC の使用を簡素化し、一般的なエラーを回避するのに役立ちます。コア JDBC ワークフローを実行し、アプリケーション コードを残して SQL を提供し、結果を抽出します。このクラスは、SQL クエリまたは更新を実行し、ResultSet の反復を開始し、JDBC 例外をキャッチして、org.springframework.dao パッケージで定義された汎用的でより有益な例外階層に変換します。

JdbcTemplateメソッドの内部作業のそれぞれに抽象化を提供します。たとえばinsert()update()選択したデータベースの具象クラスからの実装を内部的に使用します。これらのメソッドはデータベース ベンダーによって実装されているため、クライアント コードでこれらのメソッドを認識または実装する必要はありません。それがTemplateデザインパターンに非常にマッチする理由です。

于 2015-10-15T16:33:01.773 に答える