1

私の先生は本当に良い人で、彼のポイントを理解する傾向がありますが、これは私の頭を悩ませています. 彼は Template Method を 2 つのバリエーションで説明しています。
- 統一: 標準のバリアント。それ以外の場合は修正されたアルゴリズムのバリアント部分を定義するいくつかの抽象メソッドを持つ抽象クラスで構成されます。
- 分離: クラスに templateMethod() が含まれ、インターフェイスへの委譲を使用してアルゴリズムの部分を変更する彼自身のバリアント (と思いますか?) は、Strategy パターンとまったく同じように見えます。

彼のポイントが何であるか、そして「分離」バリアントが戦略パターンとどのように異なるかを誰でも見ることができますか?
彼の本 (まだ出版されていません) から 2 つのパターンを含む画像を添付しました。

http://img64.imageshack.us/img64/3620/strategytemplate.jpg

4

3 に答える 3

0

テンプレート方法:

  1. 行動設計パターンです
  2. メソッドスタブを作成し、実装のいくつかのステップをサブクラスに任せるために使用されます。これは、順序が固定されている特定のステップで構成されています。
  3. アルゴリズムを実行する手順を定義し、すべてまたは一部のサブクラスに共通するデフォルトの実装を提供できます。
  4. スーパークラス テンプレート メソッドは、サブクラスからメソッドを呼び出します。

戦略パターン:

  1. 行動パターンです
  2. それは委任に基づいています
  3. メソッドの動作を変更することにより、オブジェクトの内部を変更します
  4. アルゴリズムのファミリを切り替えるために使用されます
  5. 実行時のオブジェクトの動作を変更します。アルゴリズムのファミリーから 1 つのアルゴリズムが選択されます。

基本的な違い。

  1. テンプレートメソッドは継承を使用し、ストラテジーはコンポジションを使用します
  2. 基本クラスによって実装されたTemplate メソッドはオーバーライドしないでください。このように、アルゴリズムの構造はスーパークラスで制御され、詳細はサブクラスで実装されます。
  3. ストラテジーは、実行時にアルゴリズムを変更する機能を提供するインターフェイスの背後にあるアルゴリズムをカプセル化します。複数の戦略は、インターフェイスに異なる実装を提供します。

ソースメイキングの記事とともに理解を深めるために、Journaldev Template methodStrategyの記事をご覧ください。

于 2016-02-13T17:22:42.730 に答える