22

戦略パターンと委任パターン(委任ではない)の違いは何ですか?

4

4 に答える 4

27

戦略パターンは、一般的なソフトウェアの問題に対する非常に具体的な設計ソリューションです。戦略パターンは、

  • Strategy と呼ばれる (または名前の一部として Strategy を含む) インターフェイス。このインターフェイスには、execute() というメソッドが必要です。
  • Strategy インターフェイスを実装する ConcreteStrategyA、ConcreteStrategyB などと呼ばれる 1 つ以上の具象クラス。
  • Strategy を含むコンテキスト クラスも存在する必要があります。

委任は、パターンよりもプリンシパルです。委任とは、単一のオブジェクトがすべてを担当するのではなく、責任を他のオブジェクトに委任することを意味します。これが一般的な手法である理由は、結合を減らして凝集性を高めることにより、ソフトウェア開発のさらに基本的な 2 つの原則を強化するためです。

とはいえ、パターンについて心配する必要はありません。プリンシパルに焦点を当て、ソリューションを改善できると思われる場合は、パターンを調べて、より良いネズミ捕りがあるかどうかを確認してください。プリンシパルではなくパターンに焦点を当てると、すべてのパターンに迷い、パターンを実装するためにパターンを実装していることに気付くでしょう...

于 2009-08-03T22:30:01.680 に答える
12

「委任」は実際にはデザインパターンではなく、コンポーネントAがタスク(どのような種類のタスクでも)をコンポーネントBに委任する一般的なプログラミング手法です。委任は多くのコンテキストで使用できます。

一方、戦略パターンは特定のパターンであり、通常、実装の詳細として委任を多用します。

たとえば、戦略パターンを実装し、それを使用して呼び出すことができます

strategy.execute(x)

ストラテジーパターンには、ストラテジーインターフェイスのさまざまな実装があり、実行時に適切な実装を選択することが含まれます。その実装を呼び出す行為は委任です。

したがって、どちらでもない/または、概念は補完的です。

于 2009-08-03T22:13:51.993 に答える
2

ここに考えがあります:

デリゲートはデリゲート クラスを模倣します (少なくとも私が使用したように、それが標準的な方法であるかどうかはわかりませんが、それが私が通常行う方法です)。基本的に、複数のエントリ ポイント (メソッド) を持つクラスがあり、実行時に実装を変更したい場合は、同じインターフェイスを実装するデリゲートを作成します。

一方、実行時に交換できるようにしたいクラスの一部がある場合、単一のメソッド インターフェイス (executeCalculation など) を持つ Strategy クラスを作成し、それを含むクラスの集約コンポーネントにします。 .

つまり、戦略には単一の動作が含まれ、デリゲートは一連の動作を実装し、デリゲートを使用して戦略を実装できます。

于 2011-02-23T18:31:55.967 に答える