意图:定义一个系列算法,把他们一个个封装起来,并且使它们可互相替换。使得算法可以独立于使用它的客户。
传统C++方法实现:
#include <memory>
#include <iostream>
using namespace std;
class Strategy
{
public:
virtual void doAlgorithm(void)=0;
virtual ~Strategy(){}
protected:
};
class StrategyA : public Strategy
{
public:
void doAlgorithm(void){cout<<"StrategyA::doAlgorithm()"<<endl;}
};
class StrategyB : public Strategy
{
public:
void doAlgorithm(void){cout<<"StrategyB::doAlgorithm()"<<endl;}
};
class UseStrategy
{
public:
UseStrategy(shared_ptr<Strategy> ps):ps_(ps){}
void useAlgorithm(void)
{
shared_ptr<Strategy> ps = this->ps_.lock();
ps->doAlgorithm();
}
private:
weak_ptr<Strategy> ps_;
};
int main(int, char *[])
{
shared_ptr<Strategy> ps = make_shared<StrategyA>();
UseStrategy user(ps);
user.useAlgorithm();
//新增了一个算法
ps = make_shared<StrategyB>();
UseStrategy user1(ps);
user1.useAlgorithm();
};
输出:
StrategyA::doAlgorithm()StrategyB::doAlgorithm()
请按任意键继续. . .
现代C++实现,参考 std::function