C++策略模式
概念:定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法变化,不会影响到使用算法的用户。
使用场景:用于屏蔽相同功能的不同版本算法接口差异,(比如人脸识别算法的封装),用户可以任意使用各种算法,无需修改代码中已经调用的接口
代码:
#ifndef STRATEGY_HPP
#define STRATEGY_HPP
//filename:startegy.hpp
#include<iostream>
class Strategy
{
public:
virtual void Func() = 0;
};
class ConcreteStrategy1:public Strategy
{
public:
void Func() overide
{
std::cout<<"ConcreteStrategy1::Func"<<std::endl
}
};
class ConcreteStrategy2:public Strategy
{
public:
void Func() overide
{
std::cout<<"ConcreteStrategy2::Func"<<std::endl
}
};
class StrategyContext
{
public:
void SetStrategy(Strategy* ptr)
{
m_stragegy=ptr;
}
void ContextInterface()
{
if(m_stragegy)
{
m_stragegy->Func();
}
}
private:
Strategy* m_stragegy=nullptr;
};
#endif
//example
//filename:main.cpp
#include<Strategy.hpp>
int main()
{
StrategyContext context;
context.SetStrategy(new ConcreteStrategy1);
context->ContextInterface();
return 0;
}