当前位置: 首页 > news >正文

奉贤网站建设上海站霸深圳招聘网站排名

奉贤网站建设上海站霸,深圳招聘网站排名,福州制作网站提供商,wordpress register_setting深入浅出设计模式--命令模式 一、背景二、问题三、解决方案四、试用场景总结五、后记 一、背景 命令模式是一种行为设计模式#xff0c;它可以将用户的命令请求转化为一个包含有相关参数信息的对象#xff0c;命令的发送者不需要知道接收者是如何处理这条命令#xff0c;多个… 深入浅出设计模式--命令模式 一、背景二、问题三、解决方案四、试用场景总结五、后记 一、背景 命令模式是一种行为设计模式它可以将用户的命令请求转化为一个包含有相关参数信息的对象命令的发送者不需要知道接收者是如何处理这条命令多个功能入口可以发送同一命令避免多处多次实现相同功能的冗余代码。另外可以对命令进行延迟处理或放入队列或栈中支持命令回撤。 二、问题 在使用GUI界面的应用程序时一般保存功能会有多个入口比如点击按钮保存、点击菜单项保存和使用键盘ctrls保存等每个入口的位置不同且没有什么关联关系只是最终实现文档保存功能的代码是一样的。   此时要么将这些操作代码复制粘贴进多个类中要么就是让菜单项依赖于按钮显然这两种方式都是不明智的。 三、解决方案 一般在这种一对多、多对多的场景下最好的方式是添加一个中间层上层负责GUI的交互下层负责业务逻辑的处理中间层则将命令请求抽象为一个对象在上下两层中传递消息数据该对象可以连接不同的GUI和业务逻辑对象GUI 对象无需了解业务逻辑对象是否获得了请求也无需了解其对请求进行处理的方式。   1. 该模式的类图如下所示发送者ICommandSender中包含了命令接口ICommand的指针ICommand中只有execute虚函数具体的命令类SaveCommand中包含有命令接收者Document的指针且重写execute函数。CommandHistory类记录了每条执行了的命令调用pop弹出命令时可以调用该命令的redo函数下图中未展示进行命令撤销。 2. 该模式下各类之间交互的时序图如下首先生成命令接收者Document然后生成命令SaveCommand并绑定Document接下来生成命令发送者Button并绑定SaveCommand最后Button调用触发函数click让命令对象去执行具体的execute函数。   3. 相关代码实现 命令发送者 class CommandHistory{ public:static CommandHistory* GetInstance(){static CommandHistory cmdHis;return cmdHis;}void push(ICommand* cmd){m_cmdHisVec.push(cmd);}void pop(){m_cmdHisVec.pop();}size_t size(){return m_cmdHisVec.size();} private:stackICommand* m_cmdHisVec; };#define CMD_HIS CommandHistory::GetInstance()class ICommandSender{ public:ICommandSender(){}~ICommandSender(){}void setCommand(ICommand* cmd){m_cmd cmd;}ICommand* getCommand(){return m_cmd;} protected:ICommand* m_cmd; };class Button : public ICommandSender{ public:void click(){m_cmd-execute(Sent by Button);CMD_HIS-push(m_cmd);cout Count of Button history command is CMD_HIS-size() endl;} };class Shortcut : public ICommandSender{ public:void setCommand(const string key, ICommand* cmd){m_cmd cmd;m_keyCmdMap[key] cmd;}void press(){m_cmd-execute(Sent by Shortcut);CMD_HIS-push(m_cmd);cout Count of Shortcut history command is CMD_HIS-size() endl;} private:mapstring, ICommand* m_keyCmdMap; };命令 class ICommand{ public:virtual ~ICommand(){}virtual void execute(const string from) 0; }; class SaveCommand : public ICommand{ public:SaveCommand(Document* doc) : m_doc(doc) {}virtual void execute(const string from) override{m_doc-setText(from);m_doc-save();} private:Document* m_doc; };命令接收者 class Document{ public:void setText(const string text){m_text text;}void save(){cout m_text has been saved endl; } private:string m_text; };四、试用场景总结 若多个不同操作对应同一处理结果那么可以使用命令模式。如点击菜单项、点击按钮和ctrls进行保存若同一操作在不同的场景下产生不同的结果在运行时切换已连接的命令也可以使用命令模式。如用户可以配置菜单项在点击时触发不同的命令。若需要将操作放入队列中延迟或计划发送命令也可以使用命令模式。若要实现操作回滚撤销功能也可以使用命令模式。命令历史记录是一种包含所有已执行命令对象及其相关程序状态备份的栈结构。若要远程执行命令需要将命令对象序列化从而能方便地写入文件或数据库中。 五、后记 以上所有内容均为原创代码已上传至gayhub https://github.com/gangster-puppy/Design-Pattern.git
http://www.zqtcl.cn/news/890333/

相关文章:

  • 企业网站维护wordpress特效代码
  • 建设银行网站短信错误6次wordpress新主题去版权
  • 国外 配色网站天猫店购买交易平台
  • 网站推广广告词大全集网站和网络建设自查报告
  • 电子商务网站建设备案须知自己做的网站服务器在哪里
  • 怎样用wordpress做网站wordpress 首页判断
  • jsp做的网站效果织梦网站程序模板
  • 展示型网站设计公司网盘wordpress
  • 网站建设 保密学服装设计后悔了
  • 网站建设前端和后端网站开发所遵循的
  • 有自己域名的个人网站企业网站建设制作公司
  • 工程行业网站优化网站推广排名
  • 青岛网站建设软件下载广州app网站建设
  • 天津市建设厅官方网站qq电脑版登录
  • 贵阳手机网站建设公司辽源网站建设
  • 淄博网站设计制作wordpress 纯静态首页
  • 规划电子商务网站流程福清建设局网站简介
  • 使用joomla的网站网络营销师资格证有什么用
  • 做经营网站怎么赚钱吗关于做网站的合同
  • 上海手机网站建设哪家好重庆景点
  • 做网站菜单背景图片wordpress伪原创词库
  • 网络维护工程师工资多少聊城哪里做优化网站
  • 网站开发用什么字体查询域名备案
  • 济南品牌网站建设公司网站单个页面紧张搜索引擎蜘蛛
  • 公司需要一个简单的网站包头网站建设奥北
  • 怎么制作网站导航页新手做网站详细步骤
  • 自己个人网站后台怎么做wordpress多程序用户同步
  • 赣州网联科技有限公司wordpress安装后优化
  • 二手书的网站建设做设计在哪个网站找图片大全
  • 网站seo设计北京市建设投标网站