常见设计模式的解析和实现(C++)之十六-Strategy模式
来源:互联网 发布:php正则表达式验证邮箱 编辑:程序博客网 时间:2024/05/16 09:54
作用:
定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换.本模式使得算法可独立于使用它的客户而变化.
UML结构图:
解析:
简而言之一句话,Strategy模式是对算法的封装.处理一个问题的时候可能有多种算法,这些算法的接口(输入参数,输出参数等)都是一致的,那么可以考虑采用Strategy模式对这些算法进行封装,在基类中定义一个函数接口就可以了.
实现:
1)Strategy.h
定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换.本模式使得算法可独立于使用它的客户而变化.
UML结构图:
解析:
简而言之一句话,Strategy模式是对算法的封装.处理一个问题的时候可能有多种算法,这些算法的接口(输入参数,输出参数等)都是一致的,那么可以考虑采用Strategy模式对这些算法进行封装,在基类中定义一个函数接口就可以了.
实现:
1)Strategy.h
/******************************************************************** created: 2006/08/06 filename: Strategy.h author: 李创 http://www.cppblog.com/converse/ purpose: Strategy模式的演示代码*********************************************************************/#ifndef STRATEGY_H#define STRATEGY_Hclass Strategy;class Context{public: Context(Strategy *pStrategy); ~Context(); void ContextInterface();private: Strategy* m_pStrategy;};class Strategy{public: virtual ~Strategy(){} virtual void AlgorithmInterface() = 0;};class ConcreateStrategyA : public Strategy{public: virtual ~ConcreateStrategyA(){} virtual void AlgorithmInterface();};#endif2)Strategy.cpp
/******************************************************************** created: 2006/08/06 filename: Strategy.cpp author: 李创 http://www.cppblog.com/converse/ purpose: Strategy模式的演示代码*********************************************************************/#include <iostream>#include "Strategy.h"Context::Context(Strategy *pStrategy) : m_pStrategy(pStrategy){}Context::~Context(){ delete m_pStrategy; m_pStrategy = NULL;}void Context::ContextInterface(){ if (NULL != m_pStrategy) { m_pStrategy->AlgorithmInterface(); }}void ConcreateStrategyA::AlgorithmInterface(){ std::cout << "AlgorithmInterface Implemented by ConcreateStrategyA\n";}3)Main.cpp
/******************************************************************** created: 2006/08/06 filename: Main.cpp author: 李创 http://www.cppblog.com/converse/ purpose: Strategy模式的测试代码*********************************************************************/#include "Strategy.h"int main(){ Strategy* pStrategy = new ConcreateStrategyA(); Context* pContext = new Context(pStrategy); pContext->ContextInterface(); delete pContext; return 0;}
- 常见设计模式的解析和实现(C++)之十六-Strategy模式
- 常见设计模式的解析和实现(C++)之十六-Strategy模式
- 常见设计模式的解析和实现(C++)之十六-Strategy模式
- 设计模式的解析和实现(C++)之十六-Strategy模式
- 常见设计模式的解析和实现(C++)---Adapt模式
- 常见设计模式的解析和实现(C++)之二十-Visitor模式
- 常见设计模式的解析和实现(C++)之十九-Memento模式
- 常见设计模式的解析和实现(C++)之十八-Iterator模式
- 常见设计模式的解析和实现(C++)之十七-State模式
- 常见设计模式的解析和实现(C++)之十五-Observer模式
- 常见设计模式的解析和实现(C++)之十四-Command模式
- 常见设计模式的解析和实现(C++)之十三-FlyWeight模式
- 常见设计模式的解析和实现(C++)之十二-ChainOfResponsibility模式
- 常见设计模式的解析和实现(C++)之十一-TemplateMethod模式
- 常见设计模式的解析和实现(C++)之十-Proxy模式
- 常见设计模式的解析和实现(C++)之九-Decorator模式
- 常见设计模式的解析和实现(C++)之八-Composite模式
- 常见设计模式的解析和实现(C++)之七-Bridge模式
- Linux下C语言编程——时间表示
- Oracle表字段操作,增、删、改
- 关于GridView修改,更新,删除操作
- matlab与vc混编1
- OpenGL中位图的操作(glReadPixels,glDrawPixels和glCopyPixels应用举例)
- 常见设计模式的解析和实现(C++)之十六-Strategy模式
- javascript中的时间操作
- Android Gallery图片比例自适应
- Linux下C语言编程——信号处理
- 学习中提高or实践中提高
- 大家帮我看看这是怎么回事 8个节点 其中有一个HRegionServer 没有跑起来
- hibernate更新报错 java.util.ConcurrentModificationException
- Win7设好IIS,访问网站时遇到的一系列错误 “ 403.14---404.7---404.3”
- 大端、小端问题详解