请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。
意图:将一个请求封装成一个对象,从而可以用不同的请求对客户进行参数化。
何时使用:在某些场合,行为请求者与行为实现者通常是一种紧耦合的关系,比如要对行为进行”记录、撤销/重做、事务”等处理,这种情况无法抵御变化。如何将”行为请求者”与”行为实现者”解耦?——将行为抽象为对象。
优点: 1、降低了系统耦合度。 2、容易扩展新的命令。
缺点:命令的无限扩展会增加类的数量,提高系统实现的复杂度。
使用场景:
- 请求调用者和请求接收者需要解耦,使得调用者和接收者不直接交互
- 需要抽象出等待执行的行为
- 例如:1、GUI 中每一个按钮都是一条命令。 2、模拟 CMD。
**
- Command:命令
- Receiver:命令接收者,也就是命令真正的执行者
- Invoker:通过它来调用命令
- Client:可以设置命令与命令的接收者
宏命令
命令模式中的宏命令(mecro command)是多个命令组合在一起的命令,又称为组合命令,它是命令模式和组合模式的产物。宏命令是一个具体命令,包含了对其他对象的引用,在调用宏命令的execute()时,它会调用其成员的execute(),一个宏命令的成员对象可以是简单命令,也可以是宏命令。
模拟开机过程:BIOS -> 主引导记录-> 硬盘启动 -> 操作系统
四个命令:BIOSStartCommand、MBRStartCommand、HDDStartCommand、OSStartCommand;