目录
1.概述
策略模式:
定义一系列算法,把它们一个个封装起来,使得它们可以相互替换。策略模式使得算法变化可独立于使用它的用户。
优点:
①算法可以自由切换。
②避免使用多重条件判断。
③扩展性良好。
缺点:
①策略类会增多。
②所有策略类都需要对外暴露。
2.UML类图
3.代码实现
//strategy.h
#pragma once
#include <iostream>
class Strategy {
public:
virtual ~Strategy() = default;
public:
virtual void Algorithm() = 0;
};
class StrategyX : public Strategy {
public:
void Algorithm() {
std::cout << "Algorithm X.\n";
}
};
class StrategyY : public Strategy {
public:
void Algorithm() {
std::cout << "Algorithm Y.\n";
}
};
//context.h
#pragma once
#include <memory>
#include "strategy.h"
class Context
{
public:
Context(std::shared_ptr<Strategy> pStrategy) :m_pStrategy(pStrategy) {}
public:
void Operation() {
if (m_pStrategy) {
m_pStrategy->Algorithm();
}
}
private:
std::shared_ptr<Strategy> m_pStrategy;
};
//main.cpp
#include "context.h"
int main(int argc, char* argv[]) {
std::shared_ptr<Context> pCntxt = std::make_shared<Context>(std::make_shared<StrategyX>());
pCntxt->Operation();
return 0;
}