- 浏览: 373366 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (335)
- C++ (190)
- 设计模式 (43)
- 数据库技术 (5)
- 网络编程 (11)
- 自动化测试 (6)
- Linux (13)
- OpenSSL (10)
- MS Crypt API (5)
- SCM (2)
- English (4)
- Android (10)
- EMV规范 (1)
- Saturn Platform (0)
- C (10)
- SQL (2)
- ASP.NET (3)
- 英语口语学习 (3)
- 调试工具 (21)
- 编译技术 (5)
- UML (1)
- 项目管理 (5)
- 敏捷开发 (2)
- Http Server (6)
- 代码审查、代码分析 (5)
- 面试基础 (10)
- 重点知识 (16)
- STL (6)
- Efficient C++资料 (8)
- 数据结构和算法 (7)
- 读书笔记 (0)
- 开源项目 (4)
- 多线程 (2)
- Console App (6)
- 个人开源项目 (4)
- IBM DevelopWorks (4)
- Java (16)
- 内存泄漏相关调试和检测 (13)
- 软件测试相关技术 (2)
- C# (11)
- Apple Related (1)
- 软件测试和管理 (2)
- EMV (1)
- Python (1)
- Node.js (6)
- JavaScript (5)
- VUE (1)
- Frontend (1)
- Backend (4)
- RESTful API (3)
- Firebase (3)
最新评论
-
u013189503:
来个密码吧
[C++][Logging] 项目中写日志模块的实现 -
wyf_vc:
来个密码啊!!
[C++][Logging] 项目中写日志模块的实现
1 意图
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
命令模式可以将"动作的请求者"从"动作的执行者"对象中解耦。
2 别名
动作(Action) 事物(Transaction)
以前做过一个项目,类似控制台的命令,把复杂的请求和相应利用Command模式进行封装;
在headfirst中采用的是遥控器的例子,具体如下:
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
命令模式可以将"动作的请求者"从"动作的执行者"对象中解耦。
2 别名
动作(Action) 事物(Transaction)
以前做过一个项目,类似控制台的命令,把复杂的请求和相应利用Command模式进行封装;
////////////////////////////////////////////////////////////////////////// #include "Reciever.h" class Reciever; class Command { public: virtual ~Command(){} virtual void Excute() = 0; protected: Command(){} }; class ConcreteCommand : public Command { public: ConcreteCommand(Reciever *rev){this->_rev = rev;} ~ConcreteCommand(){} void Excute(){this->_rev->Action();} private: Reciever *_rev; }; ////////////////////////////////////////////////////////////////////////// #include <iostream> using namespace std; class Reciever { public: Reciever(){} ~Reciever(){} void Action() { cout << "Reciever action..."<<endl; } }; ////////////////////////////////////////////////////////////////////////// #include "Command.h" class Command; class Invoker { public: Invoker(Command *cmd){this->_cmd = cmd;} ~Invoker(){} void Invoke(){this->_cmd->Excute();} private: Command *_cmd; }; int main(int argc, char *argv[]) { Reciever *rev = new Reciever(); Command *cmd = new ConcreteCommand(rev); Invoker *inv = new Invoker(cmd); inv->Invoke(); return 0; }
在headfirst中采用的是遥控器的例子,具体如下:
#include <iostream> #include <cassert> #include <string> using namespace std; //命令模式 namespace Command { ////////////////////////////////////////////////////////////////////////// const int REMOTE_SIZE = 7; ////////////////////////////////////////////////////////////////////////// class Light { public: Light(){} Light(string str){ m_Name = str;} void on(){ cout << m_Name.c_str() << " Light is on" << endl;} void off(){ cout << m_Name.c_str() << " Light is off" << endl;} private: string m_Name; }; ////////////////////////////////////////////////////////////////////////// class Command { public: virtual ~Command(){} virtual void execute() = 0; virtual char* getName() = 0; }; ////////////////////////////////////////////////////////////////////////// class LightOnCommand : public Command { public: LightOnCommand(Light* light) :m_Light(NULL) { this->m_Light = light; } ~LightOnCommand() { //if (m_Light != NULL) //{ // delete m_Light; //} } virtual void execute() { assert(m_Light != NULL); m_Light->on(); } virtual char* getName() { return "LightOnCommand"; } private: Light* m_Light; }; ////////////////////////////////////////////////////////////////////////// class LightOffCommand : public Command { public: LightOffCommand(Light* light) :m_Light(NULL) { this->m_Light = light; } ~LightOffCommand() { if (m_Light != NULL) { delete m_Light; } } virtual void execute() { assert(m_Light != NULL); m_Light->off(); } virtual char* getName() { return "LightOffCommand"; } private: Light* m_Light; }; ////////////////////////////////////////////////////////////////////////// class Stereo { public: void on(){ cout << "Stereo::on" << endl;} void setCD(){ cout << "Stereo::setCD" << endl;} void setVolume(int vol) { cout << "Stereo::setVolume(" << vol << ")"<< endl; } }; ////////////////////////////////////////////////////////////////////////// class StereoOnWithCDCommand : public Command { public: StereoOnWithCDCommand(Stereo* stereo) :m_Stereo(NULL) { m_Stereo = stereo; } virtual ~StereoOnWithCDCommand() { //if (m_Stereo != NULL) //{ // delete m_Stereo; //} } virtual void execute() { assert(m_Stereo != NULL); m_Stereo->on(); m_Stereo->setCD(); m_Stereo->setVolume(11); } virtual char* getName() { return "LightOffCommand"; } private: Stereo* m_Stereo; }; ////////////////////////////////////////////////////////////////////////// class SimpleRemoteControl { public: SimpleRemoteControl() :m_Slot(NULL) {} ~SimpleRemoteControl() { //if (m_Slot != NULL) //{ // delete m_Slot; //} } void setCommand(Command* command) { //if (m_Slot != NULL) //{ // delete m_Slot; //} m_Slot = command; } void buttonWasPressed() { assert(m_Slot != NULL); m_Slot->execute(); } private: Command* m_Slot; }; ////////////////////////////////////////////////////////////////////////// class RemoteControlTest { public: void run() { //test for simple remote control SimpleRemoteControl* remote = new SimpleRemoteControl(); Light* light = new Light(); LightOnCommand* lightOn = new LightOnCommand(light); remote->setCommand(lightOn); remote->buttonWasPressed(); delete light; delete lightOn; Stereo* stereo = new Stereo(); StereoOnWithCDCommand* stereoOnWithCDCommand = new StereoOnWithCDCommand(stereo); remote->setCommand(stereoOnWithCDCommand); remote->buttonWasPressed(); delete stereo; delete stereoOnWithCDCommand; delete remote; } }; }//namespace Command
- _行为模式__head_first_设计模式之命令模式_Command_.zip (174 KB)
- 下载次数: 0
发表评论
-
FreeRTOS
2022-03-05 16:31 253Ref https://blog.csdn.net/weix ... -
串口通讯相关
2018-11-02 13:44 417https://bbs.csdn.net/wap/topics ... -
[转]C++验证IP是否可以PING通
2018-10-30 17:54 1346https://www.cnblogs.com/guoyz13 ... -
C++/MFC 換皮膚
2018-10-20 11:05 481https://blog.csdn.net/u01123991 ... -
WinCE 截屏 - C++ 代碼
2018-08-31 09:45 580// this function create a bmp ... -
Android NDK搭建環境
2017-11-27 13:25 593https://www.cnblogs.com/ut2016- ... -
8583协议相关
2017-10-17 13:38 5828583相关资料,整理中... -
Java高级应用之JNI
2017-06-19 09:00 609参考link http://www.cnblogs.com/l ... -
C++实现ping功能
2017-04-18 11:21 2176基础知识 ping的过程是向目的IP发送一个type=8的I ... -
OpenSSL 编译环境搭建
2017-03-27 15:01 9161 安裝VS2008到 c:\Program Files (x ... -
最优非对称加密填充(OAEP)
2017-03-25 14:53 1596OpenSSL命令---rsautl http://blog. ... -
[Platform Builder] 设置SVM OS build Env
2016-11-10 11:39 01 copy one OSDesign Project to ... -
[Windows] System Error Codes(GetLastError )0-----5999
2016-10-26 13:28 1886ERROR_SUCCESS 0 (0x0) T ... -
开源Windows驱动程序框架
2016-09-17 21:35 878转自 http://code.csdn.net/news/28 ... -
c/c++代码中执行cmd命令
2016-09-14 14:50 1926转自 http://blog.csdn.net/slixinx ... -
C#使用C++标准DLL实例(包含callback)
2016-09-11 19:44 1095C++编写标准Win32DLL如下 头文件 /***** ... -
C#调用C++的DLL搜集整理的所有数据类型转换方式
2016-09-09 16:07 974转自 http://www.cnblogs.com/zeroo ... -
WinCE CPU使用率计算 测试工具
2016-09-08 16:14 1006转自 http://blog.csdn.net/jan ... -
switch在C++与C#中的一些差异
2016-09-08 15:19 821参考链接 http://blog.csdn.net/weiwe ... -
C++ 鼠标模拟程序
2016-09-04 12:09 1623转自 http://blog.csdn.net/weixinh ...
相关推荐
在Head First 设计模式这本书中,第六章详细介绍了如何在C++中实现命令模式。 命令模式的核心思想是将"做什么"与"谁去做"分离开来。命令对象持有接收者并调用其特定方法,而调用者只关心命令对象,而不关心具体的...
《Headfirst设计模式》是一本深受开发者欢迎的设计模式学习书籍,尤其对于初学者而言,其独特的教学方式使得复杂的概念变得易于理解。这本书以其高清的中文版PDF格式提供,结合书中源码,为读者提供了深入实践的可能...
总的来说,这个压缩包包含的资源可以帮助你深入理解设计模式,通过《HeadFirst设计模式》和《HeadFirst in Java》的源码,你可以学习到如何在实际项目中应用这些模式。而UML类图则提供了直观的视角,便于你把握设计...
《Head First 设计模式》的英文版是一本面向初学者的设计模式入门书籍,它以幽默风趣的文风,深入浅出地介绍了软件设计中经常使用的设计模式。设计模式是一套被反复使用、多数人知晓、经过分类编目、代码设计经验的...
第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton、Command、Adapter、Facade、Template Method、iterator、Composite、State、proxy。最后三章比较...
行为型模式则关注于对象间的交互和责任分配,例如策略模式(Strategy)、观察者模式(Observer)和命令模式(Command)。 在《Head First 设计模式》中,作者通过幽默风趣的插图和生动的例子,使得原本可能枯燥的...
《Head First设计模式》是一本深受开发者欢迎的设计模式教程,以其独特的视觉呈现方式和易于理解的语言,让初学者也能快速掌握设计模式的核心概念。这本书深入浅出地介绍了23种GOF(GoF,Gamma、Erich、Johnson、...
《HeadFirst设计模式JAVA版源码》是一份深入学习设计模式的重要资源,它基于流行的编程语言Java,旨在帮助开发者理解并应用设计模式于实际项目中。设计模式是软件工程中的重要概念,它代表了在特定场景下解决问题的...
《Head First设计模式》是软件开发领域的一本经典著作,主要介绍了面向对象设计中的各种模式。这本书通过生动、直观的方式,使读者能够更好地理解和应用设计模式。源代码是书中理论知识的具体实现,可以帮助读者深入...
《Head First设计模式》是一本深受开发者欢迎的设计模式学习书籍,以其独特的教学方式,通过丰富的图解和幽默的语言,帮助读者深入理解设计模式的核心概念。这本书的官方源码提供了书中所讲解的每个设计模式的实际...
《Head-First设计模式》是设计模式领域内一本广受欢迎的入门书籍,以其独特的视觉呈现方式和易懂的讲解风格,让初学者也能快速理解并掌握设计模式的精髓。设计模式是软件工程中的一种最佳实践,是解决常见编程问题的...
《Head First设计模式》是一本深受程序员喜爱的书籍,它以独特的方式讲解了设计模式这一核心的编程概念。设计模式是软件开发中的经验总结,是解决常见问题的有效模板,可以帮助开发者编写可维护、可扩展、易理解的...
行为型模式则关注对象间的责任分配和交互,例如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、命令模式(Command)、迭代器模式(Iterator)、访问者模式(Visitor)、备忘录...
《Head First设计模式》(中文版)共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计模式。前言先介绍这本书的用法;第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、...
行为型模式则关注对象之间的交互和职责分配,如观察者模式(Observer)、模板方法模式(Template Method)、命令模式(Command)、迭代器模式(Iterator)、策略模式(Strategy)、状态模式(State)、访问者模式...
《Head First设计模式学习代码详解》 设计模式是软件工程中的宝贵经验总结,它提供了一套通用的解决方案模板,帮助开发者在面对复杂问题时能够快速有效地进行设计和开发。Head First设计模式是一本非常受欢迎的设计...
根据提供的文件信息,“Head First设计模式中文版带书签”主要涉及的是软件工程中的设计模式这一核心主题。设计模式是在软件开发过程中针对特定问题而形成的最佳实践或解决方案模板,能够帮助开发者解决常见的设计...