[解決済み] ストラテジーパターンとコマンドパターンの使い分け
質問
どちらのデザインパターンもアルゴリズムをカプセル化し、その呼び出しクラスから実装の詳細を切り離します。私が識別できる唯一の違いは、Strategyパターンが実行のためのパラメータを取るのに対し、Commandパターンは取らないということです。
コマンドパターンは、作成時に実行のためのすべての情報が利用可能であることを必要とし、(おそらくスクリプトの一部として)その呼び出しを遅らせることができるように思えます。
1つのパターンと他のパターンのどちらを使用するかは、どのように決定するのでしょうか?
どのように解決するのですか?
この 2 つのパターンの違いを説明するために、GoF デザイン パターンのいくつかのカプセル化階層テーブルを含めています。うまくいけば、それぞれがカプセル化するものをよりよく示すことができ、私の説明がより意味をなすようになります。
まず最初に、階層は、与えられたパターンが適用される範囲、またはテーブルのどちら側から始めるかによって、あるレベルの詳細をカプセル化するために使用する適切なパターンを一覧表示します。
表からわかるように、Strategy Patternオブジェクトはアルゴリズムの実装の詳細を隠すので、異なるStrategyオブジェクトを使用すると、同じ機能を異なる方法で実行することになります。各ストラテジーオブジェクトは特定の要因に最適化されているか、他のパラメータで動作している可能性があります。
Commandパターンはアルゴリズムよりもはるかに小さなレベルの詳細をカプセル化する。オブジェクトにメッセージを送るために必要な詳細、つまりレシーバ、セレクタ、引数をカプセル化します。プロセス実行のそのような小さな部分をオブジェクト化することの利点は、そのようなメッセージは、その詳細をハードコードすることなく、一般的な方法で時間や場所の異なるポイントに沿って呼び出すことができるということです。これにより、実行前に特定の呼び出しの詳細を知る必要がなく、メッセージを 1 回以上呼び出したり、システムの異なる部分や複数のシステムに伝えたりすることができます。
デザインパターンにありがちなことですが、パターン名を冠するために、すべての実装が細部まで同一である必要はありません。詳細は、実装や、オブジェクト対メソッドの引数としてどのようなデータがエンコードされているかで変わる可能性があります。
関連
-
[解決済み] MVPとMVC、その違いは何ですか?
-
[解決済み] 静的クラスとシングルトンパターンの違い?
-
[解決済み] 私的相続、公的相続、保護相続の違いについて
-
[解決済み】クラスの命名 - すべてを"<WhatEver>Manager "と呼ぶのを避けるには?[クローズド]
-
[解決済み】C++ シングルトンデザインパターン
-
[解決済み】Proxy、Decorator、Adapter、Bridgeの各パターンの違いとは?
-
[解決済み】ラッパークラスとは何ですか?
-
[解決済み】ファサードデザインパターンとは何ですか?
-
[解決済み] テンプレート方式とストラテジーパターンの違いは何ですか?
-
[解決済み] Hystrixが採用しているBulkhead Patternとは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] シングルトン・パターンの欠点やデメリットは何ですか?[クローズド]
-
[解決済み] アグリゲート・ルートって何?
-
[解決済み】リレーショナルデータベースデザインパターン?[クローズド]
-
[解決済み】ラッパークラスとは何ですか?
-
[解決済み】MVCにおけるビジネスロジック【終了しました
-
[解決済み] [Builder Design パターンと Factory Design パターンの違いは何ですか?[クローズド]。
-
[解決済み】Javaの関数ポインタの最も近い代用品は何ですか?
-
[解決済み] シェルスクリプトのデザインパターンやベストプラクティス [終了しました]。
-
[解決済み] ソーシャルネットワークにアクティビティストリームを実装する方法
-
[解決済み] Hystrixが採用しているBulkhead Patternとは何ですか?