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

南昌网站定制公司哪家好哪个国家的绘本网站做的好

南昌网站定制公司哪家好,哪个国家的绘本网站做的好,分销网站手机模板,国家级示范校建设专题网站链接#xff1a;C 设计模式 链接#xff1a;C 设计模式 - 访问者模式 命令模式#xff08;Command Pattern#xff09;是一种行为型设计模式#xff0c;它将请求封装成一个对象#xff0c;从而使你可以用不同的请求对客户进行参数化#xff0c;对请求排队或记录请求日志…链接C 设计模式 链接C 设计模式 - 访问者模式 命令模式Command Pattern是一种行为型设计模式它将请求封装成一个对象从而使你可以用不同的请求对客户进行参数化对请求排队或记录请求日志以及支持可撤销的操作。 1. 问题分析 在开发中我们经常需要向某个对象发送请求但我们希望请求的发送者和接收者解耦。我们还可能需要对请求进行排队、记录日志甚至支持撤销操作。 命令模式通过将请求封装成一个独立的对象使得请求的发送者和接收者解耦。每个命令对象都实现一个统一的接口包含执行请求的方法。这样我们可以用不同的命令对象对客户进行参数化并且可以很容易地扩展新的命令。 2.实现步骤 定义命令接口Command声明执行请求的方法。实现具体命令类ConcreteCommand实现命令接口执行具体的请求。定义接收者类Receiver包含执行具体请求的方法。定义调用者类Invoker持有命令对象并在某个时刻调用命令对象的执行方法。客户端代码Client创建具体命令对象并将其传递给调用者。 3.代码示例 以机器人示例。 3.1.定义命令接口 class Command {public:virtual ~Command() default;virtual void execute() 0; };3.2.实现具体命令类 // 接收者类机器人 class Robot {public:void moveForward() { std::cout Robot moves forward std::endl; }void moveBackward() { std::cout Robot moves backward std::endl; }void turnLeft() { std::cout Robot turns left std::endl; }void turnRight() { std::cout Robot turns right std::endl; } };3.3.定义接收者类 // 具体命令类前进 class MoveForwardCommand : public Command {public:MoveForwardCommand(Robot* robot) : robot_(robot) {}void execute() override { robot_-moveForward(); }private:Robot* robot_; };// 具体命令类后退 class MoveBackwardCommand : public Command {public:MoveBackwardCommand(Robot* robot) : robot_(robot) {}void execute() override { robot_-moveBackward(); }private:Robot* robot_; };// 具体命令类左转 class TurnLeftCommand : public Command {public:TurnLeftCommand(Robot* robot) : robot_(robot) {}void execute() override { robot_-turnLeft(); }private:Robot* robot_; };// 具体命令类右转 class TurnRightCommand : public Command {public:TurnRightCommand(Robot* robot) : robot_(robot) {}void execute() override { robot_-turnRight(); }private:Robot* robot_; };3.4.定义调用者类 // 调用者类遥控器 class RemoteControl {public:void setCommand(Command* command) { command_ command; }void pressButton() {if (command_) {command_-execute();}}private:Command* command_ nullptr; };3.5.客户端代码 int main() {// 创建接收者对象Robot robot;// 创建具体命令对象MoveForwardCommand moveForwardCommand(robot);MoveBackwardCommand moveBackwardCommand(robot);TurnLeftCommand turnLeftCommand(robot);TurnRightCommand turnRightCommand(robot);// 创建调用者对象RemoteControl remoteControl;// 设置命令并按下按钮remoteControl.setCommand(moveForwardCommand);remoteControl.pressButton();remoteControl.setCommand(moveBackwardCommand);remoteControl.pressButton();remoteControl.setCommand(turnLeftCommand);remoteControl.pressButton();remoteControl.setCommand(turnRightCommand);remoteControl.pressButton();return 0; }4.C函数对象 函数对象是一个重载了 operator() 的类其实例可以像函数一样被调用。函数对象的主要目的是将行为封装到对象中使得对象可以像函数一样被调用。函数对象强调的是行为的封装和灵活性。 4.1.定义函数对象类 // 函数对象类前进 class MoveForward {public:MoveForward(Robot* robot) : robot_(robot) {}void operator()() { robot_-moveForward(); }private:Robot* robot_; };// 函数对象类后退 class MoveBackward {public:MoveBackward(Robot* robot) : robot_(robot) {}void operator()() { robot_-moveBackward(); }private:Robot* robot_; };4.2.定义调用者类 // 调用者类遥控器 class RemoteControl {public:void setCommand(std::functionvoid() command) { command_ command; }void pressButton() {if (command_) {command_();}}private:std::functionvoid() command_; };4.3.客户端代码 int main() {// 创建接收者对象Robot robot;// 创建函数对象MoveForward moveForward(robot);MoveBackward moveBackward(robot);// 创建调用者对象RemoteControl remoteControl;// 设置命令并按下按钮remoteControl.setCommand(moveForward);remoteControl.pressButton();remoteControl.setCommand(moveBackward);remoteControl.pressButton();return 0; }5.命令模式与函数对象的对比 5.1. 相似点 封装行为命令模式和函数对象都可以用于封装行为使得行为可以像对象一样被传递和调用。解耦两者都可以实现请求的发送者和接收者的解耦。 5.2. 不同点 设计意图 命令模式主要用于将请求封装成对象从而支持请求的排队、记录日志、撤销和重做等操作。函数对象主要用于将行为封装到对象中使得对象可以像函数一样被调用强调行为的灵活性和可组合性。 结构复杂度 命令模式通常包含多个角色命令、具体命令、调用者、接收者结构较为复杂。函数对象通常只需要一个包含 operator() 方法的类结构较为简单。 使用场景 命令模式适用于需要对请求进行排队、记录日志、支持撤销和重做等操作的场景。函数对象适用于需要将行为封装到对象中并像函数一样调用的场景。 命令模式和函数对象在C中都可以用于封装行为但它们在设计意图和使用场景上有所不同。命令模式主要用于将请求封装成对象从而支持请求的排队、记录日志、撤销和重做等操作而函数对象主要用于将行为封装到对象中使得对象可以像函数一样被调用强调行为的灵活性和可组合性。
http://www.hkea.cn/news/14534900/

相关文章:

  • discuz网站论坛间帖子转移部署一个网站大概多少钱
  • 西安网站建设有那些公司在线解析网站
  • 嘉兴cms模板建站本地网站搭建教程
  • 重庆江北网站建设porto 4wordpress下载
  • 有侧边栏的网站网站建设中企动力最佳a5
  • 建设网站入什么科目手机手机端网站建设
  • 合作公司做网站网站宣传的手段有哪些
  • 京紫元年网站建设网站开发语言版本不同
  • 北京想象力网站建设公司wordpress信息搜集
  • 中国做投资的网站杭州网络公司网站
  • 如何做网站豆瓣天津百度推广网络科技公司
  • h5个人博客网站模板无锡制作网站公司简介
  • 用qq空间做网站优秀个人网页设计案例分析
  • 新版织梦腾讯3366小游戏门户网站模板源码甘肃省集约化网站建设
  • 惠州市建设工程交易中心网站网站页面跳转怎么做
  • 忻州市中小企业局网站产品展示类网站模板
  • 官方网站welcome怎么注册关于网站建设分类
  • 专业做胶粘剂招聘网站玉环市建设局网站
  • 长沙 网站建设品牌推荐做网站流量怎么赚钱吗
  • 联合易网做网站建设银行网站怎么开通手机通知
  • 亿创电力建设集团有限公司网站wordpress新建页面
  • 百度网站如何做drupal和wordpress
  • 建设工程监理考试网站广州企业网站哪家好
  • 手机网站制作吧网络营销是什么内容
  • 建设银行在网站上开通短信提醒wordpress会员卡系统
  • 中国门户网站有哪些一个空间可以做多个网站吗
  • 无锡网站建设网服装网站建设策划书的基本结构
  • 卢松松的网站专业的菏泽网站建设
  • 沧州大型网站建设免费个人网站建站申请一下
  • 电脑做系统ppt下载网站网络文化有限公司网站建设策划书