请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。
意图:将一个请求封装成一个对象,从而可以用不同的请求对客户进行参数化。
何时使用:在某些场合,行为请求者与行为实现者通常是一种紧耦合的关系,比如要对行为进行”记录、撤销/重做、事务”等处理,这种情况无法抵御变化。如何将”行为请求者”与”行为实现者”解耦?——将行为抽象为对象。
优点: 1、降低了系统耦合度。 2、容易扩展新的命令。
缺点:命令的无限扩展会增加类的数量,提高系统实现的复杂度。
使用场景:

  • 请求调用者和请求接收者需要解耦,使得调用者和接收者不直接交互
  • 需要抽象出等待执行的行为
  • 例如:1、GUI 中每一个按钮都是一条命令。 2、模拟 CMD。

**命令模式 - 图1

  • Command:命令
  • Receiver:命令接收者,也就是命令真正的执行者
  • Invoker:通过它来调用命令
  • Client:可以设置命令与命令的接收者

image.png

宏命令

命令模式中的宏命令(mecro command)是多个命令组合在一起的命令,又称为组合命令,它是命令模式和组合模式的产物。宏命令是一个具体命令,包含了对其他对象的引用,在调用宏命令的execute()时,它会调用其成员的execute(),一个宏命令的成员对象可以是简单命令,也可以是宏命令。
模拟开机过程:BIOS -> 主引导记录-> 硬盘启动 -> 操作系统
四个命令:BIOSStartCommand、MBRStartCommand、HDDStartCommand、OSStartCommand;
image.png