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

营销网站建设网络公司最好用的系统优化软件

营销网站建设网络公司,最好用的系统优化软件,新疆生产建设兵团政府网站,分类信息网站建设模板命令模式是一种行为型设计模式,它将请求封装成一个对象,从而能使你可以用不同的请求对客户端进行参数化。该模式允许请求的发送者和接收者进行解耦,发送者不需要知道接收者的信息,只需要通过命令对象来与它进行交互。 命令模式有…

命令模式是一种行为型设计模式,它将请求封装成一个对象,从而能使你可以用不同的请求对客户端进行参数化。该模式允许请求的发送者和接收者进行解耦,发送者不需要知道接收者的信息,只需要通过命令对象来与它进行交互。

命令模式有四个角色:

1、抽象命令:它定义了执行操作的接口,包含一个执行方法和一个可选的撤销操作,这里的撤销是撤销命令,恢复成上一个命令执行的结果。

2、具体命令:实现了命令接口,持有接收者对象的引用,负责在接收者上执行操作。

3、接收者:执行命令所代表的操作

4、调用者:持有命令对象,发送请求并触发命令执行。

举例:

使用遥控器控制电灯的开和关。

#include <iostream>
#include <memory>// 接收者-电灯
class Light
{
public:void On(){std::cout << "电灯已经打开" << std::endl;}void Off(){std::cout << "电灯已经关闭" << std::endl;}
};// 抽象命令
class ICommand
{
public:virtual ~ICommand() {}virtual void Execute() = 0;virtual void Undo() = 0;protected:std::shared_ptr<Light> light_;
};// 具体命令-打开电灯
class CloseLight: public ICommand
{
public:CloseLight(std::shared_ptr<Light> _light){light_ = _light;}virtual void Execute() override{light_->On();}virtual void Undo() override{light_->Off();}
};// 具体命令-关闭电灯
class OpenLight: public ICommand
{
public:OpenLight(std::shared_ptr<Light> _light){light_ = _light;}virtual void Execute() override{light_->Off();}virtual void Undo() override{light_->On();}
};// 调用者-遥控器
class RemoteControl
{
public:void SetCommand(std::shared_ptr<ICommand> _command){command_ = _command;}void PressButton(){if(command_)command_->Execute();}void Undo(){if(command_)command_->Undo();}private:std::shared_ptr<ICommand> command_;
};

示例中,我们首先定义了一个抽象命令接口(ICommand),定义了两个方法Exectue()和Undo(),分别用于执行操作和撤销命令。

然后我们又创建了两个具体的命令类(OpenLight)和(CloseLight),分别实现了这两个方法。这些具体命令类会持有对接收者对象(Light)的引用,通过执行方法调用相应的操作。

最后创建了一个调用者角色(RemoteControl)作为遥控器。遥控器持有一个命令对象,提供设置命令对象和触发命令的执行方法。通过按下(PressButton)执行具体的命令,通过Undo撤销命令。

测试:

void TestCommand()
{// 创建接收者std::shared_ptr<Light> light = std::make_shared<Light>();// 创建命令std::shared_ptr<ICommand> openLight = std::make_shared<OpenLight>(light);std::shared_ptr<ICommand> closeLight = std::make_shared<CloseLight>(light);// 创建调用者std::shared_ptr<RemoteControl> remoteControl = std::make_shared<RemoteControl>();// 设置命令remoteControl->SetCommand(openLight);remoteControl->PressButton();remoteControl->Undo();remoteControl->SetCommand(closeLight);remoteControl->Undo();
}

测试代码中,我们创建了两个具体命令:打开电灯和关闭电灯、一个接收者,也就是电灯、一个遥控器对象。

通过遥控器设置命令,按下按钮,就可以执行具体的命令。

输出结果:

电灯已经打开
电灯已经关闭
电灯已经打开

可以看到,我们先设置命令为打开电灯,按下按钮,电灯已经打开,执行撤销方法,电灯就被关闭,然后我们设置命令为关闭电灯,执行撤销方法,电灯就被打开。

所以这里的撤销其实是撤销当前命令

命令模式遵顼的设计原则:

1、单一职责原则:每个命令类负责执行一个特定的命令。

2、开放封闭原则:可以动态的添加或删除命令,不影响现有代码。

3、里氏替换原则:命令模式中的具体命令类是抽象命令的子类,因此可以通过具体命令类的替换来扩展和改变命令的行为。

4、接口隔离原则:命令模式通过抽象命令和具体命令的设计,可以将不同的请求封装成不同的命令类,从而避免大量的接口在同一个类中定义。

优点:

1、解耦对象间的关系:命令模式将请求者和接收者解耦,使得命令发送者只需要知道抽象命令类,不需要知道具体的接收者,降低了系统的耦合度。

2、容易扩展新的命令:新增一个命令非常容易,不需要修改现有代码,符合开闭原则。

3、支持撤销和重做操作:命令模式可以将命令对象存储在历史记录中,实现命令的撤销和重做

4、支持队列请求和日志化请求:命令模式可以将命令对象放入队列中,实现对请求的排队和延迟执行,还可以将命令对象做持久化处理,实现对请求的日志记录。

缺点:

1、增加了系统的复杂度:引入了多个命令类、接收者类、调用类,增加了系统的复杂度。

2、可能会使类膨胀:每个命令都需要一个具体的命令类去实现,如果命令太多,就会造成类的数量过于膨胀,增加了系统的维护成本。

http://www.hkea.cn/news/106719/

相关文章:

  • wordpress单页主题营销seo手机关键词网址
  • dedecms做电影网站韩国最新新闻
  • 哪个网站做废旧好如何在百度上发布自己的广告
  • 网站表单及商品列表详情模板如何搭建自己的网站
  • 网站域名登记证明百度高级搜索怎么用
  • 国外网站在国内做镜像站点网站搭建费用
  • 网站后台如何添加关键词软件开发公司
  • 手机做网站的网站windows优化大师卸载不了
  • 万网速成网站有哪些 功能自己的网站怎么推广
  • 邯郸哪有做网站的河南百度推广公司
  • 我是做环保类产品注册哪些浏览量大的网站推销自己的产品比较好呢西安网站seo优化公司
  • 网页传奇游戏排行昆明网络推广优化
  • 商城模板网站模板网站软文是什么
  • 校园网站推广方案怎么做网站排名推广工具
  • 深圳罗湖企业网站建设报价网络媒体发稿平台
  • 用别人公司域名做网站线下推广的渠道和方法
  • php mysql的网站开发外贸推广平台
  • 济南网站建设认可搜点网络能百度指数有三个功能模块
  • 网上商城网站建设意义在线代理浏览网页
  • 网站图片切换代码百度下载并安装最新版
  • 微信公众平台号申请注册入口杭州seo公司
  • 本周实时热点新闻事件seo文章代写一篇多少钱
  • 旺店通app手机企业版下载网站seo如何优化
  • 宝山区建设用地事务所网站网络公司有哪些
  • 用sql做简单的博客网站大连谷歌seo
  • 新手怎么学做网站就业培训机构有哪些
  • magento网站建设搭建网站步骤
  • 营销网站如何实现差异化南京seo公司
  • 服务器托管是啥搜索引擎优化排名培训
  • 山西手机网站建设网址大全123