设计模式之策略模式(C++实现)
2016-05-16 14:57
225 查看
策略模式其实是很简单并且很好用的一个模式。在开发中,我们经常碰到一个功能,可以使用不同的算法去实现它,我们要根据不同的情况去调用对应的算法,策略模式就是定义一系列算法,并且把它们封装起来,并且使它们相互可替换。其实这个模式就和多态的思想很相近。
例如,我们去旅游可以使用不同的策略:走路,跑步,飞。。。我们可以根据自己的情况去使用相对应的策略。
/***********************************************************************main.cpp********************************************************************/
/***********************************************************************Travel.h********************************************************************/
/***********************************************************************Walk.h********************************************************************/
/***********************************************************************Run.h********************************************************************/
/***********************************************************************Fly.h********************************************************************/
但是策略模式会过多地暴露算法实现的细节,可以与工厂模式相结合使用
例如,我们去旅游可以使用不同的策略:走路,跑步,飞。。。我们可以根据自己的情况去使用相对应的策略。
/***********************************************************************main.cpp********************************************************************/
#include "Fly.h" #include "Travel.h" #include "Run.h" #include "Walk.h" int main() { Travel * myTravel =(Travel*) new Walk; myTravel->travel();//输出Walk myTravel = (Travel*) new Run; myTravel->travel();//输出Run myTravel = (Travel*) new Fly; myTravel->travel();//输入Fly getchar(); return 0; }
/***********************************************************************Travel.h********************************************************************/
#pragma once; #include <iostream> using namespace std; class Travel { public: virtual void travel() { cout<<"travel"<<endl; } };
/***********************************************************************Walk.h********************************************************************/
#include "Travel.h" class Walk:Travel { public: virtual void travel() { cout<<"Walk"<<endl; } };
/***********************************************************************Run.h********************************************************************/
<pre name="code" class="cpp">#include "Travel.h" class Run:Travel { public: virtual void travel() { cout<<"Run"<<endl; } };
/***********************************************************************Fly.h********************************************************************/
#include "Travel.h" class Fly:Travel { public: virtual void travel() { cout<<"Fly"<<endl; } };
但是策略模式会过多地暴露算法实现的细节,可以与工厂模式相结合使用
相关文章推荐
- C语言笔记(七)
- C语言笔记(六)
- 我的C++学习之路
- C++中字符串的库函数
- C语言笔记(五)
- C语言笔记(四)
- C语言笔记(三)
- C++11(九)
- C语言笔记(二)
- C语言笔记(一)
- 重新学习c++,开启人生新篇章
- VC++/MFC中DoModal
- VS2010进行远程调试C++
- C++第10/11周项目 继承与派生 【是春哥啊】(复习新版)
- C++第10/11周项目 继承与派生 【项目5 - 摩托车继承自行车和机动车】(复习新版)
- C++第10/11周项目 继承与派生 【项目4- 教师兼干部类】(复习新版)
- 深入理解内存对齐
- C++:实现split分割字符串
- [关键字]C/C++中static关键字详解
- C++ 默认析构函数