设计模式(六)策略模式Strategy

来源:互联网 发布:网络机顶盒怎么安装图 编辑:程序博客网 时间:2024/06/01 19:38

意图:定义一个系列算法,把他们一个个封装起来,并且使它们可互相替换。使得算法可以独立于使用它的客户。

传统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




0 0
原创粉丝点击