• 设计模式策略模式


    参考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
    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    java 运算
    java String
    java的数据类型
    Python: str() 和 repr() 的区别
    Linux命令:which
    Linux命令:locate
    Linux命令:ifconfig
    Linux命令:whereis
    Linux命令:rz 和 sz
    Linux命令:scp
  • 原文地址:https://www.cnblogs.com/itdef/p/7456887.html
Copyright © 2020-2023  润新知