美文网首页
命令模式和策略模式

命令模式和策略模式

作者: 奔跑地蜗牛 | 来源:发表于2019-03-02 16:31 被阅读0次

定义

命令模式是指:通过把一个请求封装成一个对象,从而可以使用不同的请求例如命令等将客户端参数化;可以将请求排队或者记录请求日志,可以支持请求撤销操作;命令模式是一个对象行为模式,别名为动作模式或者事务模式;
命令模式在将一个请求封装成一个对象后,无需了解请求激活的动作或者接收该请求后处理的细则;
这是一种两台机器之间通信性质的模式,命令模式解耦了发送者和接受者之间的联系,发送者调用一个操作,接收者执行该操作,发送者无需知道接收者对于该操作的任何接口。

结构图

单请求单接收

命令模式1.png

接口说明:

  • Invoker:命令调用者,它通过命令来发送请求;
  • Command:抽象命令对象,它通常是一个接口或者一个抽象类,其中声明了一个execute()方法来调用命令接受者;
  • ConcreteCommand:命令对象,抽象命令的实现者,其内通过会依赖一个命令接收者,该命令接收者执行具体的动作;
  • Receiver: 命令接受者,它通常是命令具体执行者,其内会有一个action()方法,该方法是对请求的业务处理;

单请求多接收

命令模式-单请求多接收.png

其中将多个命令封装到一个List中,从而实现一个请求将有多个接受者进行处理;

请求支持撤销动作

请求支持撤销动作.png

-其中在Command方法中加入撤销动作undo(),即可实现该命令的撤销;

场景

命令模式非常类似“请求-响应”模式,因此它比较适用于日志记录,撤销操作,请求队列等场景,如以下等场景:

  • 适用命令模式作为"回调(CallBack)"在面向对象系统中的替代。"CallBack"讲得便是先将一个函数登记上,然后在以后调用此函数。
  • 需要在不同的事件指定请求,将请求排队。一个命令对象和命令发出者可以有不同的生命周期。换言之,原先的请求发出者可能已经不在了,而命令对象本身仍然是活动的。这时命令对象可能仍在本地,也可以在网络的另外一个地址。命令对象可以在序列化之后传送到另外一台机器上。
  • 系统需要支持命令的撤销,重新执行。命令对象可以把状态存储起来,等到客户端需要撤销命令时,执行undo()方法,把命令所产生的效果撤销掉。命令对象还可以提供redo()方法,以供客户端在需要时再重新实施命令效果。
  • 如果要将系统中所有数据更新到日志里,以便在系统崩溃时,可以根据日志读回所有的数据更新命令,重新调用Execute()方法一条一条执行这些命令,从而恢复系统在崩溃前所做的数据更新。

策略模式

定义

策略模式定义了一系列的算法,并且将每个算法封装成一个对象,同时这些算法还可以相互替代

结构图

策略模式.png

说明:

  • Context:需要使用ConcreteStrategy提供的算法,并且其内部维护了一个Strategy的实例,同时负责动态设置运行时Strategy具体算法,还要负责Strategy之间的交互和数据传递;

  • Strategy:定义了一个公共接口,各种算法实现该接口,Context使用该接口来实现不同的算法,一般为一个抽象类或者公共接口;

  • ConcreteStrategy:算法具体实现类;

策略模式和命令模式区别

  • 目标不同: 策略模式主要针对同一动作,才用不同的实现方式,而命令模式是针对不同的命令,有不同的接收者来实现;
  • 主体不同:策略模式的主体是具体的应用对象,例如排序器,可以根据不同的场景才用不同的排序方式;而命令模式的主体是请求发送者和请求接受者,例如遥控器和空调,遥控器会有空凋相应的指令,来命令空调执行相应的方法;

相关文章

  • 策略模式

    策略模式是行为型模式的一种,同时属于行为模式的还有:命令模式,观察者模式,状态模式和之前写的中介者模式。 策略模式...

  • 命令模式和策略模式

    定义 命令模式是指:通过把一个请求封装成一个对象,从而可以使用不同的请求例如命令等将客户端参数化;可以将请求排队或...

  • Java8之被简化的设计模式

    Java8命令模式简化 策略模式

  • 掰扯设计模式 之 策略模式与命令模式的区别

    一直觉得命令模式和策略模式很像,实际写出来的代码甚至有时候很难分出来是命令模式和策略模式。然后在网上查了一下,果然...

  • JS 设计模式

    工厂模式 单体模式 模块模式 代理模式 职责链模式 命令模式 模板方法模式 策略模式 发布-订阅模式 中介者模式 ...

  • 设计模式-?策略模式

    感觉就是个面向接口编程,and 和命令模式还有中介者模式差不多,但是又差很多...应该说策略模式是两层的,而命令和...

  • 常用设计模式 2018-09-15

    目录 代理模式 单例模式 命令模式 工厂模式 桥接模式 策略模式 装饰模式 观察者模式 门面模式 代理模式 静态代...

  • 设计模式&架构模式

    设计模式:命令模式:ReactiveCocoa 的RACCommand实现MVVM策略模式:Swift 中的map...

  • 命令模式

    命令模式是行为型模式的一种,同时属于行为模式的还有:状态模式,观察者模式,策略模式和之前写的中介者模式。 什么是命...

  • 状态模式

    状态模式是行为型模式的一种,同时属于行为模式的还有:命令模式,观察者模式,策略模式和之前写的中介者模式。 什么是状...

网友评论

      本文标题:命令模式和策略模式

      本文链接:https://www.haomeiwen.com/subject/jgzjuqtx.html