C++ でストラテジ パターンを実装する手順は次のとおりです: ストラテジ インターフェイスを定義し、実行する必要があるメソッドを宣言します。特定の戦略クラスを作成し、それぞれインターフェイスを実装し、さまざまなアルゴリズムを提供します。コンテキスト クラスを使用して、具体的な戦略クラスへの参照を保持し、それを通じて操作を実行します。
C++ でストラテジー デザイン パターンを実装する方法
はじめに
ストラテジー パターンは、クライアント コードを変更せずに実行時にアルゴリズムや動作を変更できるようにする動作デザイン パターンです。これにより、アルゴリズムへの参照を変更せずにアルゴリズムを柔軟に切り替えることができます。
ストラテジー パターンの実装
C++ でストラテジー パターンを実装するには、いくつかの手順が必要です:
実践例
異なる比較アルゴリズムを必要とする並べ替えアルゴリズムがあると仮定します。戦略パターンを使用すると、これを簡単に実現できます。
基本戦略インターフェース:
class Comparator { public: virtual bool compare(int a, int b) = 0; };
具体的な戦略クラス:
class AscendingComparator : public Comparator { public: bool compare(int a, int b) override { return a < b; } }; class DescendingComparator : public Comparator { public: bool compare(int a, int b) override { return a > b; } };
コンテキストクラス:
class Sorter { public: Sorter(Comparator* comparator) : comparator(comparator) {} void sort(int* arr, int size) { for (int i = 0; i < size - 1; i++) { for (int j = i + 1; j < size; j++) { if (comparator->compare(arr[i], arr[j])) { std::swap(arr[i], arr[j]); } } } } private: Comparator* comparator; };
使用法:
int main() { int arr[] = {5, 3, 1, 2, 4}; int size = sizeof(arr) / sizeof(int); Sorter sorter(new AscendingComparator()); sorter.sort(arr, size); for (int i = 0; i < size; i++) { cout << arr[i] << " "; // Output: 1 2 3 4 5 } cout << "\n"; sorter.setComparator(new DescendingComparator()); sorter.sort(arr, size); for (int i = 0; i < size; i++) { cout << arr[i] << " "; // Output: 5 4 3 2 1 } cout << "\n"; return 0; }
この例では、Sorter
类可以根据提供的比较策略对数组进行排序。通过更换比较策略,我们可以轻松地在升序和降序排序之间切换,而无需修改 Sorter
ロジックです。
以上がC++ で戦略デザイン パターンを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。