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

网站做推广页需要什么软件淘宝运营培训班哪里有

网站做推广页需要什么软件,淘宝运营培训班哪里有,岚县网站建设,github page做公司网站从C编程入手设计模式——命令模式 ​ 命令模式是一个用指令封装请求的优雅方法。换而言之,对于一个复杂的系统,当我们发现,使用一系列的指令(Command)来操作对象的时候,这个设计模式就会显得非常的实用。我…

从C++编程入手设计模式——命令模式

​ 命令模式是一个用指令封装请求的优雅方法。换而言之,对于一个复杂的系统,当我们发现,使用一系列的指令(Command)来操作对象的时候,这个设计模式就会显得非常的实用。我们经常遇到这样的场景:用户点击一个按钮,希望执行某个操作,比如保存文件、删除一条记录、或撤销上一步操作。我们通常会写一段代码来直接响应这个按钮事件。然而,如果我们希望这个操作是可以记录、撤销、重做,甚至延迟执行的,传统的方式就变得笨拙而混乱。

​ 这个时候,命令模式(Command Pattern)就派上用场了。它的核心思想很简单:把每一个操作封装成一个对象。这样,我们就可以把操作当作数据一样存储、传递、撤销甚至组合。命令模式中通常有几个角色:命令对象(Command)、接收者(Receiver)、调用者(Invoker)和客户端。命令对象负责封装“做什么”;接收者是实际干活的人;调用者是触发命令的人;客户端负责把它们组合在一起。

​ 我们可以想象一个遥控器控制家电的例子。电灯是接收者,它有开和关的功能;开灯命令和关灯命令是命令对象;遥控器就是调用者,它保存着按钮和命令的映射;用户就是客户端,负责把命令装进遥控器并按下按钮。

#include <iostream>
#include <memory>
#include <vector>// 命令接口
class Command {
public:virtual void execute() = 0;virtual ~Command() = default;
};// 接收者
class Receiver {
public:void action() {std::cout << "Receiver: Executing action.\n";}
};// 具体命令
class ConcreteCommand : public Command {
private:std::shared_ptr<Receiver> receiver;
public:explicit ConcreteCommand(std::shared_ptr<Receiver> r) : receiver(std::move(r)) {}void execute() override {receiver->action();}
};// 调用者
class Invoker {
private:std::vector<std::shared_ptr<Command>> commandQueue;
public:void addCommand(std::shared_ptr<Command> cmd) {commandQueue.push_back(std::move(cmd));}void run() {for (const auto& cmd : commandQueue) {cmd->execute();}commandQueue.clear();}
};int main() {auto receiver = std::make_shared<Receiver>();auto command = std::make_shared<ConcreteCommand>(receiver);Invoker invoker;invoker.addCommand(command);invoker.run();return 0;
}

​ 如你所见,这个就是常见的命令模式的模板代码。

优缺点讨论

命令模式的一个好处是,它实现了调用者和接收者之间的彻底解耦。调用者并不知道命令怎么执行,它只知道有个命令对象可以被触发。这使得我们可以在不改变调用者的前提下,轻松替换命令,甚至在运行时动态改变行为。

此外,命令模式还为我们带来了其他附加功能。比如,可以将命令记录到列表中,支持撤销和重做;可以组合多个命令形成宏命令,实现批量操作;可以把命令序列化之后发到远程服务器执行,实现远程控制。

不过命令模式也有它的代价。每个操作都要定义一个命令类,当操作很多时,类的数量会迅速增加。此外,为了支持撤销,命令对象还需要记录足够的信息,这可能会带来额外的内存负担。

练习题:通过命令控制文本编辑器

描述
模拟一个文本编辑器,用户可以执行“添加文字”、“删除文字”等操作,每个操作为一个命令。

要求

  • 接收者 TextDocument,支持添加和删除字符
  • 命令:AddTextCommand, DeleteTextCommand
  • 支持撤销操作
  • Invoker 为 EditorInvoker,负责管理执行历史

modern-cpp-patterns-playground/Command/TextEditor at main · Charliechen114514/modern-cpp-patterns-playground

http://www.fp688.cn/news/143686.html

相关文章:

  • 寿光市住房和建设局网站seo就业指导
  • 南昌高端网站制作企业微信营销系统
  • 网站备案信息更改什么是网站推广优化
  • 建设工程网教育网官网苏州seo公司
  • 大连网站建设方法搜索引擎营销与seo优化
  • 手工制作大全视频教程优化大师官网入口
  • 如何做淘宝客个人网站网络营销顾问
  • 梅州生态建设有限公司网站百度平台商家app下载
  • 网站优化费用万网域名注册
  • 武汉网站建设全包百度推广营销
  • 商丘加盟小吃网站十大网站平台
  • 杭州建设网站的公司哪家好宁波seo快速优化
  • 四川酒店网站建设河南网站推广电话
  • 外贸公司网站怎么做seo排名优化怎样
  • 自己做的网站为什么访问不西安百度推广网站建设
  • 58同城类似的网站开发竞价sem托管公司
  • 深圳微商城网站制作百度风云榜各年度小说排行榜
  • 怎么诊断网站磁力宅
  • 加盟类网站怎么做厦门人才网唯一官网招聘
  • 网站建设的架构设计专业放心关键词优化参考价格
  • 兰州做网站哪家好app拉新推广代理平台
  • 设计一个网站的步骤网店怎么开
  • next.js做纯静态网站河南网站建设哪家公司好
  • 建设网站需要几个人完成长沙seo平台
  • 做网站的公司天津女孩短期技能培训班
  • web前端专业技能网站怎样优化seo
  • 首次建设网站流程图关键词排名seo
  • 网站测评必须做上海seo推广整站
  • 云主机 怎么做网站黑帽seo优化软件
  • 西安紧急通知seo在中国