[解決済み] テンプレート方式とストラテジーパターンの違いは何ですか?
2022-04-14 06:19:18
質問
テンプレートメソッドパターンとストラテジーパターンの違いについて教えてください。
私が知る限り、この2つは99%同じです。 テンプレートメソッドパターンは、抽象クラスをベースにしていること。 ストラテジークラスは、実装されるインターフェイスを使用します。 を、それぞれの具象ストラテジークラスが担当します。
しかし クライアント は、まったく同じように消費されるのでしょうか?
どのように解決するのですか?
両者の大きな違いは、具体的なアルゴリズムを選択する場合です。
を使用すると テンプレートメソッドパターン で発生します。 コンパイル時 によって サブクラス化 テンプレートです。 各サブクラスは、テンプレートの抽象メソッドを実装することで、異なる具象アルゴリズムを提供します。 クライアントがテンプレートの外部インターフェースのメソッドを呼び出すと,テンプレートは必要に応じてその抽象メソッド(内部インターフェース)を呼び出し,アルゴリズムを呼び出します.
class ConcreteAlgorithm : AbstractTemplate
{
void DoAlgorithm(int datum) {...}
}
class AbstractTemplate
{
void run(int datum) { DoAlgorithm(datum); }
virtual void DoAlgorithm() = 0; // abstract
}
これに対して Strategyパターン でアルゴリズムを選択することができます。 ランタイム によって 封じ込め . 具体的なアルゴリズムは別のクラスや関数で実装され、ストラテジのコンストラクタやセッターメソッドにパラメータとして渡されます。 このパラメータにどのアルゴリズムが選ばれるかは、プログラムの状態や入力に応じて動的に変化することがあります。
class ConcreteAlgorithm : IAlgorithm
{
void DoAlgorithm(int datum) {...}
}
class Strategy
{
Strategy(IAlgorithm algo) {...}
void run(int datum) { this->algo.DoAlgorithm(datum); }
}
まとめると
- テンプレートメソッドのパターンです。 コンパイル時 によるアルゴリズム選択 サブクラス化
- ストラテジーパターン 実行時アルゴリズム による選択 封じ込め
関連
-
[解決済み] MVPとMVC、その違いは何ですか?
-
[解決済み] 静的クラスとシングルトンパターンの違い?
-
[解決済み] Abstract FactoryとFactoryのデザインパターンの違いは何ですか?
-
[解決済み】クラスの命名 - すべてを"<WhatEver>Manager "と呼ぶのを避けるには?[クローズド]
-
[解決済み】関数型プログラミングはGoFデザインパターンに取って代わるか?
-
[解決済み】FactoryとAbstract Factoryのデザインパターンの基本的な違いは何ですか?[クローズド]
-
[解決済み】アンチパターンとは何ですか?
-
[解決済み] FactoryパターンとStrategyパターンの違いは何ですか?
-
[解決済み] Facade、Proxy、Adapter、Decoratorのデザインパターンの違い?
-
[解決済み] BridgeパターンとAdapterパターンの違い
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] シングルトン・パターンの欠点やデメリットは何ですか?[クローズド]
-
[解決済み] アグリゲート・ルートって何?
-
[解決済み】ラッパークラスとは何ですか?
-
[解決済み] テンプレート方式とストラテジーパターンの違いは何ですか?
-
[解決済み] ブリッジパターンはどのようなときに使うのですか?Adapterパターンとどう違う?
-
[解決済み] クロスカットの懸念事項の例
-
[解決済み] 継承と集計の比較【終了しました
-
[解決済み】デザインパターンを勉強するには?[クローズド]。
-
[解決済み] ゲームにおけるリプレイの概念的な仕組みについて教えてください。
-
[解決済み] ServiceLocatorはアンチパターンか?