前言
策略模式(Strategy Pattern)是一种行为设计模式,它定义了算法家族,分别封装起来,让它们之间可以互相替换,使得算法的变化不会影响到使用算法的客户。在C++中,策略模式通过定义一组算法,并将其封装成一系列的类来实现。通过使用策略模式,可以在运行时选择不同的算法,而不需要改变客户端代码,从而实现了算法的动态切换。
代码实现
#include <iostream>
#include <vector>
#include <algorithm>
// 定义排序策略接口
class SortingStrategy {
public:
virtual void sort(std::vector<int>& data) = 0;
virtual ~SortingStrategy() {}
};
// 具体的冒泡排序策略
class BubbleSort : public SortingStrategy {
public:
void sort(std::vector<int>& data) override {
std::cout << "Bubble Sort\n";
// 实现冒泡排序算法
// ...
}
};
// 具体的快速排序策略
class QuickSort : public SortingStrategy {
public:
void sort(std::vector<int>& data) override {
std::cout << "Quick Sort\n";
// 实现快速排序算法
// ...
}
};
// 上下文类,用于使用策略
class Context {
private:
SortingStrategy* strategy;
public:
Context(SortingStrategy* strategy) : strategy(strategy) {}
void setStrategy(SortingStrategy* newStrategy) {
strategy = newStrategy;
}
void performSort(std::vector<int>& data) {
strategy->sort(data);
}
};
int main() {
// 客户端代码
std::vector<int> data = {5, 2, 8, 3, 1};
// 使用冒泡排序策略
BubbleSort bubbleSort;
Context context(&bubbleSort);
context.performSort(data);
// 切换到快速排序策略
QuickSort quickSort;
context.setStrategy(&quickSort);
context.performSort(data);
return 0;
}
SortingStrategy 是排序策略的抽象基类,它定义了一个纯虚函数 sort,具体的排序策略类如 BubbleSort 和 QuickSort 继承了这个接口并实现了具体的排序算法。Context 类是上下文类,它包含一个指向 SortingStrategy 对象的指针,并提供了一个接口 performSort 用于执行排序。客户端代码可以通过 Context 类来切换不同的排序策略。