设计模式策略模式

参考http://blog.csdn.net/calmreason/article/details/51029285

定义一系列相同的算法 根据不同需求选择不同的算法策略

使用 bind  function 见 设计模式 策略模式2 c++11

代码

// 004.cpp: 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <memory>
#include <iostream>

using namespace std;

class Strategy {
public:
    virtual void doAlgorithm(void) = 0;
    virtual ~Strategy(){}
protected:

};

class StrategyA :public Strategy
{
    void doAlgorithm(void) { std::cout << __FUNCTION__ << std::endl; }
};

class StrategyB :public Strategy
{
    void doAlgorithm(void) { std::cout << __FUNCTION__ << std::endl; }
};

class UseStrategy
{
public:
    UseStrategy(std::shared_ptr<Strategy> ps) :ps_(ps) {}
    void useAlgorithm(void) {
        std::shared_ptr<Strategy> ps = this->ps_.lock();
        ps->doAlgorithm();
    }
private:
    std::weak_ptr<Strategy> ps_;
};


int main()
{
    std::shared_ptr<Strategy> ps = std::make_shared<StrategyA>();
    UseStrategy user(ps);
    user.useAlgorithm();

    ps = std::make_shared<StrategyB>();
    UseStrategy user1(ps);
    user1.useAlgorithm();
    return 0;
}
View Code

 

posted on 2017-08-31 10:16  itdef  阅读(136)  评论(0编辑  收藏  举报

导航