8

私はパターンを設計するのが初めてなので、これはおそらく初心者の質問ですが、テンプレートメソッドと戦略 DP を見ていましたが、それらは非常に似ているようです。定義を読んだり、UML を調べたり、コード例をチェックしたりできますが、私には、Strategy パターンは Template Method パターンを使用しているだけのように見えますが、たまたまそれをオブジェクト (つまり、構成) に渡しているだけです。

さらに言えば、テンプレート メソッドは基本的な OO 継承にすぎないようです。

それらの違いのいくつかの重要な側面が欠けていますか? テンプレートメソッドについて、基本的な継承以上のものを見逃していますか?

注: これに関する以前の投稿 ( 672083 ) がありますが、いつ使用するかについて詳しく説明されています。

4

2 に答える 2

10

それは基本的にすべてセマンティクスに帰着します。戦略パターンを使用すると、特定のアルゴリズム/手順 (戦略) を別のオブジェクトに渡すことができ、そのオブジェクトはそれを使用します。テンプレート メソッドを使用すると、アルゴリズムの特定の側面を維持しながら、アルゴリズムの特定の側面をオーバーライドできます (順序を同じに保ち、たとえば「テンプレート」など、常に開始時と終了時に行われることを行います)。一方、継承は、データ モデルで「IS-A」関係をモデル化する方法です。

確かに、テンプレート メソッドは継承を使用して最も簡単に実装できます (ただし、特にファンクターがある場合は、構成を同じように簡単に使用できます)。ストラテジー パターンはテンプレート メソッドでもあることがよくありますが、構文が似ている場合、意味は大きく異なります。

于 2009-06-12T20:50:44.520 に答える
1

ストラテジーデザイン パターン
は、実行時にオブジェクトのアルゴリズムを動的に交換する方法を提供します(
オブジェクト構成を介して)。

たとえば、注文処理システムでの価格の計算。
さまざまな方法で価格を計算するために、さまざまな価格設定アルゴリズムをサポートできるため、使用するアルゴリズムを選択 (注入) し、実行時に動的に交換できます。

テンプレート メソッド 設計パターンは、クラスの動作の
一部をコンパイル時に
(サブクラス化を介して) 静的に再定義する方法を提供します。

たとえば、再利用可能なアプリケーション (フレームワーク) の設計。
アプリケーションは動作の共通 (不変) 部分を実装するため、アプリケーションのユーザーは、ニーズに合わせてバリアント部分を再定義するサブクラスを作成できます。ただし、サブクラスの作成者は、動作の不変部分も動作の構造 (不変部分とバリアント部分の構造) も変更できません。

于 2015-02-21T19:47:19.200 に答える