文章目录
- 策略模式简介
- 策略模式结构
- 策略模式代码
策略模式简介
策略模式是一种行为型设计模式,它定义了一系列的算法,并将每一个算法封装起来,使它们可以相互替换。策略模式让算法的变化独立于使用算法的客户端。
策略模式结构
策略(Strategy)接口:定义了一个算法族,并声明了它们的执行方法。
具体策略(ConcreteStrategy)类:实现了策略接口定义的算法。
上下文(Context)类:持有一个策略对象的引用,并定义了使用策略的接口。
策略模式代码
// 策略接口
class SortStrategy
{
public:
virtual void sort(std::vector<int>& data) = 0;
};
// 具体策略类1
class QuickSort : public SortStrategy
{
public:
void sort(std::vector<int>& data) override
{
// 快速排序算法实现
}
};
// 具体策略类2
class MergeSort : public SortStrategy
{
public:
void sort(std::vector<int>& data) override
{
// 归并排序算法实现
}
};
// 上下文类
class SortContext
{
public:
// 初始化时绑定算法(具体策略)
SortContext(std::unique_ptr<SortStrategy> strategy)
: strategy(std::move(strategy)) {}
void sort(std::vector<int>& data)
{
strategy->sort(data);
}
private:
std::unique_ptr<SortStrategy> strategy;
};
int main()
{
std::vector<int> data = {5, 2, 8, 1, 9};
// 使用快速排序策略
// 注意使用智能指针
SortContext context(std::make_unique<QuickSort>());
context.sort(data);
// 使用归并排序策略
context = SortContext(std::make_unique<MergeSort>());
context.sort(data);
return 0;
}