目录

大话设计模式23:命令模式

大话设计模式:23.命令模式

命令模式:将一个请求封装为一个对象,从而使用户可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销操作

TL;DR:通过添加中间类的方式,使得请求者和实现者之间松耦合

命令模式结构图

1.优点

  1. 易于设计一个命令队列,即让 Invoker 包含更多命令模式
  2. 易于将命令计入日志,在 Invoker 中,添加写入即可
  3. 允许接受请求的一方决定是否要否决请求
  4. 易于实现对请求的撤销和重做
  5. 易于增加新的具体命令类
  6. 将请求一个操作的对象与知道怎么执行一个操作的对象分割开

2.实现细节

  1. Invoker 类:包含若干命令 Command,并调用该命令执行请求
  2. Command 类:抽象命令类,包含一个 Receiver 接受者,声明执行操作的接口
  3. ConcreteCommand:具体命令类,绑定一个接受者,调用接受者对应的操作,实现接口
  4. Receiver 类:具体实施/执行一个与请求相关的操作,任何类都可能成为接受者

3.使用场景

  1. 为行为请求者和行为实现者解耦
  2. 依据敏捷开发原则:不要为代码添加基于猜测的、实际不需要的功能,如果不清楚是否需要使用命令模式,就不要使用,在需要的时候通过重构实现命令模式并不困难,只有在真正需要如撤销回复等功能时,才需要将原来的代码重构为命令模式