C++设计模式10--命令模式(二)(Command)--降低请求发送者与接收者耦合
工作了一天感觉好累,洗了个澡,打开电视看看有没有喜欢的节目,拿起遥控器,看着上面的按钮,忽然感觉好奇妙,我们按一开机键,电视就开了,然后...哈哈,真好玩,我按我按。细想之下这不就是一个命令模式么。
电视机是请求的接收者Receiver,
遥控器是请求的发送者ConcreteCommand,
遥控器上有一些按钮,不同的按钮对应电视机的不同操作。
抽象命令角色由一个命令接口来扮演,有三个具体的命令类实现了抽象命令接口,这三个具体命令类分别代表三种操作:打开电视机、关闭电视机和切换频道。
显然,电视机遥控器就是一个典型的命令模式应用实例。
- #include <iostream>
- #include <vector>
- using std::cout;
- using std::endl;
- using std::vector;
- using namespace std;
- /*
- 电视机是请求的接收者,
- 也只有它的内部有一堆指令集合可以执行各种命令,它才是命令的真正执行者
- 因此它有Open打开电视, Close关闭电视,Change更换频道的接口
- 遥控器是请求的发送者,
- 它内含命令的对象,
- 负责将这个命令发送出去,因此需要有设置命令的接口,相当于人按下遥控器的按钮
- 内含RunCommand运行命令的接口,它调用了命令接口的Execute执行函数
- 遥控器上的那些按钮,
- 不同的按钮对应电视机的不同操作。
- 抽象命令角色由一个命令接口来扮演,
- 有三个具体的命令类实现了抽象命令接口,
- 这三个具体命令类分别代表三种操作:
- 打开电视机、关闭电视机和切换频道。
- 显然,电视机遥控器就是一个典型的命令模式应用实例。
- */
- // 接收者对象, 电视才是真正命令的执行者
- class Television
- {
- public :
- void Open( ) // 打开电视
- {
- std::cout <<"打开电视" <<std::endl;
- }
- void Close( ) // 关闭电视
- {
- std::cout <<"关闭电视" <<std::endl;
- }
- void Change( ) // 切换频道
- {
- std::cout <<"更换频道" <<std::endl;
- }
- };
- class Command
- {
- public :
- virtual void Execute( ) = 0; // 执行的接口
- };
- // 打开电视的命令
- class OpenCommand : public Command
- {
- public :
- OpenCommand(Television *tv)
- {
- m_tv = tv;
- }
- void Execute( ) // 执行的接口
- {
- //std::cout <<"打开电视" <<std::endl;
- m_tv->Open( );
- }
- protected :
- Television *m_tv;
- };
- // 关闭电视的命令
- class CloseCommand : public Command
- {
- public :
- CloseCommand(Television *tv)
- {
- m_tv = tv;
- }
- void Execute( ) // 执行的接口
- {
- //std::cout <<"关闭电视" <<std::endl;
- m_tv->Close( );
- }
- protected :
- Television *m_tv;
- };
- // 更换频道的命令
- class ChangeCommand : public Command
- {
- public :
- ChangeCommand(Television *tv)
- {
- m_tv = tv;
- }
- void Execute( ) // 执行的接口
- {
- //std::cout <<"更换频道" <<std::endl;
- m_tv->Change( );
- }
- protected :
- Television *m_tv;
- };
- // Invoker请求发送者
- // 要求命令对象执行请求,
- // 通常会持有命令对象,可以持有很多的命令对象
- class Control
- {
- public :
- void SetCommand(Command *command)
- {
- this->m_command = command;
- }
- void RunCommand( )
- {
- m_command->Execute();
- }
- protected:
- Command *m_command;
- };
- // 主程序其实就相当于我们人
- int main( )
- {
- // 我们手里有一个遥控器
- Control *control = new Control;
- // 家里有一个大彩电
- Television *tv = new Television;
- /// 首先我们打开电视机
- // 创建一个打开的命令, 这个命令只操纵tv这个对象
- Command *openCommand = new OpenCommand(tv);
- control->SetCommand(openCommand);
- control->RunCommand( );
- delete openCommand;
- // 换了好久频道也没找到好看的, 郁闷的关掉电视机
- // 创建一个更换频道的命令,这个命令只操纵tv这个对象
- Command *changeCommand = new ChangeCommand(tv);
- control->SetCommand(changeCommand);
- control->RunCommand( );
- delete changeCommand;
- // 换了好久频道也没找到好看的, 郁闷的关掉电视机
- // 创建一个关闭的命令, 这个命令只操纵tv这个对象
- Command *closeCommand = new CloseCommand(tv);
- control->SetCommand(closeCommand);
- control->RunCommand( );
- delete closeCommand;
- delete tv;
- delete control;
- return 0;
- }
- 本文已收录于以下专栏:
- C++设计模式
C++设计模式10--命令模式(二)(Command)--降低请求发送者与接收者耦合相关推荐
- 请求发送者与接收者解耦——命令模式
本文转载自 :http://blog.csdn.net/lovelion/article/details/8796736 装修新房的最后几道工序之一是安装插座和开关,通过开关可以控制一些电器的打开和关 ...
- 设计模式之-命令模式(Command Pattern)
命令模式(Command Pattern)是用来实现在一个请求 - 响应模型松耦合.在命令模式中,请求被发送给调用者和调用它传递给被封装的命令对象. Command对象将请求传递到接收器的适当的方法来 ...
- 设计模式之命令模式(Command)
文章目录 1. 简介 1.1 作用 优缺点 1.2使用场景 现实场景 2. 实现 2.1 UML 图 2.2 代码 1. 简介 命名模式将请求封装成一个对象: 从发出者发出命令,发出者不用关心谁接收命 ...
- java execute 执行成功_【JAVA】设计模式之命令模式(Command模式)的使用分析
命令模式属于23种设计模式中行为模式中的一个,它也是一种简单实用非常普遍的设计模式. 首先看下GOF对命令模式的定义:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录 ...
- 秒懂设计模式之命令模式(Command Pattern)
[版权申明] 非商业目的注明出处可自由转载 博文地址:https://blog.csdn.net/ShuSheng0007/article/details/116115743 出自:shusheng0 ...
- 设计模式:命令模式(Command)
欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...
- 设计模式之命令模式详解
1 概述 日常生活中,我们出去吃饭都会遇到下面的场景.我们可以将女招待理解成一个请求的发送者,用户通过它来发送一个"点餐"请求,而厨师是"点餐"请求的最终接收者 ...
- C++设计模式(8)——命令模式
命令模式 亦称:动作.事务.Action.Transaction.Command 意图 命令模式是一种行为设计模式, 它可将请求转换为一个包含与请求相关的所有信息的独立对象. 该转换让你能根据不同的请 ...
- 设计模式之命令模式详解(附应用举例实现)
文章目录 1 命令模式介绍 2 命令模式详解 2.1 命令模式结构 2.2 命令模式实现 2.3 命令模式应用举例 3 实现命令队列 1 命令模式介绍 在现实生活中人们通过使用开关来控制一些电器的打开 ...
- 设计模式之命令模式(Command)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
最新文章
- 一个比较保守的404页面
- MariaDB/MySQL 报错解决:ERROR 1698 (28000): Access denied for user 'root'@'localhost'
- JEECG弹出框提交表单
- Python脚本--Apache配置文件
- OpenCV中IplImage/CvMat/Mat转化关系
- Bootstrap3栅格系统布局实例
- Bootstrap 模态框插件Modal 的方法
- Github 平均 Star 为 3558 的机器学习开源项目,你错过了哪些?
- cocos2d怎么设置屏幕朝向?横屏 or 竖屏设置
- 多线程与多进程(4)
- java高级能力_java高级技术工程师该具备哪些能力?
- 查看计算机屏幕颜色软件是什么,显示器颜色校正软件,详细教您显示器颜色校正软件...
- android 辅助功能(无障碍)
- ensp模拟器使用USG6000V防火墙模拟搭建点到点的IPSec 隧道(web网页版)
- 解决docker报错:The container name “/mysql“ is already in use by container
- 【转载】损失函数 - 交叉熵损失函数
- bom树形结构 表设计_BOM模块常用表结构
- 七阶拉丁方阵_拉丁方阵【转】
- 别做梦了,社交产品哪有那么容易成功
- (JS)Javascript之Ajax
热门文章
- include/autoconfig.mk
- listview去掉底部多出的边框黑色
- WAMP(Windows+Apache+Mysql+PHP)环境搭建
- 大型网站的系统架构(摘)
- 系统部门岗位关联表_155页,房地产公司最为系统的岗位说明书,敬请收藏
- centos7 安装mysql_第02期:ClickHouse 单机部署以及从 MySQL 增量同步数据
- Centos7配置 SNMP服务(防火墙配置注意)
- SQLite 3.7.13的加密解密(三)—— 创建加密解密函数
- 将页面强制保持在所属框架中
- 模态 - block