در اینجا یک نمونه از الگوی طراحی استراتژی در C++ برای شما مثال می زنم:
فرض کنید کلاسی به نام SortingAlgorithm دارید که یک رابط برای مرتب سازی الگوریتم ها تعریف می کند:
class SortingAlgorithm {
public:
virtual void sort(vector<int>& data) = 0;
};
حالا، میتونید چندین کلاس مشخص که رابط SortingAlgorithm را پیادهسازی میکنند، تعریف کنید:
class BubbleSort : public SortingAlgorithm {
public:
void sort(vector<int>& data) override {
// Implementation of Bubble Sort algorithm
}
};
class QuickSort : public SortingAlgorithm {
public:
void sort(vector<int>& data) override {
// Implementation of Quick Sort algorithm
}
};
class MergeSort : public SortingAlgorithm {
public:
void sort(vector<int>& data) override {
// Implementation of Merge Sort algorithm
}
};
در مرحله بعد، می توانید کلاسی به نام Sorter تعریف کنید که از رابط SortingAlgorithm برای مرتب کردن داده ها استفاده می کند:
class Sorter {
public:
Sorter(SortingAlgorithm* algorithm) : algorithm_(algorithm) {}
void set_algorithm(SortingAlgorithm* algorithm) {
algorithm_ = algorithm;
}
void sort(vector<int>& data) {
algorithm_->sort(data);
}
private:
SortingAlgorithm* algorithm_;
};
حالا می تونید از کلاس Sorter برای مرتب سازی داده ها با استفاده از الگوریتم های مختلف استفاده کنید:
int main() {
vector<int> data = {5, 2, 4, 3, 1};
BubbleSort bubble_sort;
QuickSort quick_sort;
MergeSort merge_sort;
Sorter sorter(&bubble_sort);
sorter.sort(data);
sorter.set_algorithm(&quick_sort);
sorter.sort(data);
sorter.set_algorithm(&merge_sort);
sorter.sort(data);
return 0;
}
در این مثال، کلاس Sorter از الگوی طراحی استراتژی استفاده میکند تا الگوریتمهای مرتبسازی مختلف را به جای یکدیگر مورد استفاده قرار دهد. رابط SortingAlgorithm قراردادی را برای مرتبسازی الگوریتمها تعریف میکند، در حالی که کلاسهای بتن مانند BubbleSort، QuickSort و MergeSort این قرارداد را اجرا میکنند. کلاس Sorter یک شیء SortingAlgorithm را به عنوان پارامتر می گیرد و از آن برای مرتب سازی داده ها استفاده می کند. با تغییر شیء SortingAlgorithm ارسال شده به کلاس Sorter، می توانید الگوریتم مرتب سازی مورد استفاده برای مرتب سازی داده ها را تغییر دهید.