定义:即定义一系列的算法,算法1,算法2,...,算法n,把他们封装起来,使他们可以相互替换。
优点:使得一个类的行为或者其算法可以在运行时改变,而且使用Context类的人在外部想使用不同的算法时不用写很多的if语句了,避免了很多的if elseif else
//1、设计支持所有算法的公共接口类 Strategy
class Strategy {
public:
Strategy() = default;
~Strategy() = default;
//声明算法接口的纯虚函数
virtual void AlgorithmInterface() = 0;
};
//2、继承Strategy类 实现具体的算法和行为
class StrategyA :public Strategy
{
public:
void AlgorithmInterface() override
{
cout << "算法A的具体实现";
}
};
class StrategyB :public Strategy
{
public:
void AlgorithmInterface() override
{
cout << "算法B的具体实现";
}
};
class Context {
public:
Context()=default;
~Context()
{
if (mS != nullptr)
{
delete mS;
}
}
//5、根据传进来不同的flag,调用不同的策略
void CallAlgorithmInterface(int flag)
{
if (mS != nullptr)
{
delete mS;
}
if (flag > 10)
{
mS=new StrategyA;
}
else
{
//小于等于10则采用B策略
mS = new StrategyB;
}
mS->AlgorithmInterface();
}
private:
//4、内部关联策略的抽象类
Strategy* mS = nullptr;
};
//--------------
int main()
{
int flag = 10;
Context a;
//调用策略 运行期间传不同的值就可以调用不同的策略(算法),而且外部也避免了多重的if else语句
a.CallAlgorithmInterface(100);
return 0;
}