策略模式(Strategy Pattern)
来源:互联网 发布:实用数据分析 pdf 编辑:程序博客网 时间:2024/06/15 18:59
策略模式(Strategy Pattern)
flyfish
#include "stdafx.h"#include <iostream>#include <map>using namespace std;typedef enum StrategyType{ StrategyA, StrategyB, StrategyC}STRATEGYTYPE;class Strategy{public: virtual void Interface() = 0; virtual ~Strategy() = 0;};Strategy::~Strategy(){}class ConcreteStrategyA : public Strategy{public: void Interface() { cout << "ConcreteStrategyA." << endl; } ~ConcreteStrategyA() {}};class ConcreteStrategyB : public Strategy{public: void Interface() { cout << "ConcreteStrategyB." << endl; } ~ConcreteStrategyB() {}};class ConcreteStrategyC : public Strategy{public: void Interface() { cout << "ConcreteStrategyC." << endl; } ~ConcreteStrategyC() {}};class Context{ typedef void (Context::*pFun)();public: void Interface(int type) { auto it = m_pMessageMap.find(type); if (it != m_pMessageMap.end()) { (this->*(it->second))(); } };private: std::map<int, pFun> m_pMessageMap{ std::make_pair(STRATEGYTYPE::StrategyA, &Context::InterfaceA), std::make_pair(STRATEGYTYPE::StrategyB, &Context::InterfaceB), std::make_pair(STRATEGYTYPE::StrategyC, &Context::InterfaceC) }; void InterfaceA() { m_pStrategy = new ConcreteStrategyA; m_pStrategy->Interface(); }; void InterfaceB() { m_pStrategy = new ConcreteStrategyB; m_pStrategy->Interface(); }; void InterfaceC() { m_pStrategy = new ConcreteStrategyC; m_pStrategy->Interface(); };private: Strategy *m_pStrategy;};int main(){ Context* p = new Context(); p->Interface(STRATEGYTYPE::StrategyC); if (p) delete p; system("pause");}
阅读全文
0 0
- 策略模式(Strategy Pattern)
- 策略模式(Strategy Pattern)
- Strategy Pattern(策略模式)
- 策略(Strategy Pattern)模式
- 策略模式(Strategy Pattern)
- 策略模式(Strategy Pattern)
- 策略模式(Strategy Pattern)
- 策略模式(Strategy Pattern)
- 策略模式(Strategy Pattern)
- 策略模式(Strategy Pattern)
- 策略模式(Strategy Pattern)
- 策略模式(Strategy Pattern)
- 策略模式(Strategy Pattern)
- 策略模式(Strategy Pattern)
- 策略模式(Strategy Pattern)
- 策略模式 (Strategy Pattern)
- 策略模式(Strategy Pattern)
- 策略模式(Strategy Pattern)
- 视图和表的区别
- Android之左滑关闭窗口
- 神经网络优化——学习率
- DOTween实例
- Android的Touch事件分发的简单应用举例
- 策略模式(Strategy Pattern)
- HTTP协议详解(真的很经典)
- request的ip代理
- linux服务器下查看mysql的安装信息
- Errors running builder 'Android Package Builder' on project 解决办法
- 委托
- Xshell常用命令
- 谈谈 MVX 中的 Controller
- CardView的学习