設計模式策略模式
阿新 • • 發佈:2017-08-31
onclick sea func cal sdn 不同的 memory hide http
參考http://blog.csdn.net/calmreason/article/details/51029285
定義一系列相同的算法 根據不同需求選擇不同的算法策略
代碼
// 004.cpp: 定義控制臺應用程序的入口點。 // #include "stdafx.h" #include <memory> #include <iostream> using namespace std; class Strategy { public: virtual void doAlgorithm(void) = 0; virtual ~Strategy(){}View Codeprotected: }; 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; }
設計模式策略模式