8

これはおそらく初心者からの質問ですが、私はデザインパターンを初めて学んだので、Template MethodとStrategy DPを見ていて、とても似ています。定義を読んだり、UMLを調べたり、コード例をチェックしたりすることができますが、StrategyパターンはTemplate Methodパターンを使用しているように見えますが、ちょうどそのパターンをオブジェクトとオブジェクト(つまり合成)に渡すだけです。テンプレートの方法と戦略のデザインパターン

そして、その点については、テンプレートメソッドは、基本的なOO継承のようです。

私はその相違点についていくつかの重要な側面を見逃していますか? Template Methodについて、基本的な継承よりも多くのことを見逃しているものがありますか?

注:これには以前の投稿(672083)がありますが、それはもっと使いやすいものですが、パターン自体についての私の考えを有効にしたいと思います。

答えて

9

基本的にすべてが意味論になります。戦略パターンでは、特定のアルゴリズム/手順(戦略)を別のオブジェクトに渡し、それを使用します。テンプレートメソッドを使用すると、アルゴリズムの特定の側面をオーバーライドしながら、その特定の側面を同じに保つことができます(同じ順序を保ち、開始時と終了時に常に行われるもの...テンプレート)。継承はデータモデルで 'IS-A'関係をモデリングする方法です。

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

+0

+1優れた簡潔な説明と、継承を超えた構成の記述 –

0

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

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

Template Methodデザインパターン
は、(サブクラスを介して)コンパイル時に
を静的クラスの動作の一部を再定義 する方法を提供します。

たとえば、再利用可能なアプリケーション(フレームワーク)の設計。
アプリケーションは、 という動作の共通(不変)部分を実装しているため、アプリケーションのユーザーはサブクラスを記述して、 のバリアント部分を必要に応じて再定義できます。 サブクラスの作者は、 の不変部分と振る舞いの構造 (不変部分と変形部分の構造)を変更できません。

関連する問題