设计模式之命令模式-使用命令模式实现遥控器及总结
命令模式包含三个角色:Invoker调用者(如遥控器)、Command命令接口或抽象类、Receiver命令具体实现类(如电灯开关、音响音量加减命令),执行顺序为调用者、接收者、命令。每个命令实现execute执行动作和undo撤销动作,如StereoAddVolCommand在execute中加音量、undo中减音量。它把行为请求者与实现者解耦,适合记录、撤销重做、事务等处理场景。
- 命令模式角色:Invoker调用者、Command接口、Receiver实现
- 执行顺序:调用者、接收者、命令对象依次协作
- 命令对象实现execute与undo,支持撤销和恢复操作
- 请求者与实现者解耦,新命令可以很容易加入系统
- 缺点是具体命令类增多,如遥控器项目命令对象众多
设计模式之命令模式-使用命令模式实现遥控器及总结
先来看看项目结构:
说明:
1:命令接口对象
2:电灯打开或关闭命令
3:音响打开或关闭命令
4:音响音量增加或减少命令
来源:凯哥Java(kaigejava)
电灯开或关代码:
/**
* Created by kaigejava on 2019/8/30.
* 关灯的命令对象
*/
public class LightOffCommand implements ICommandInterface{
private LightAPI light;
public LightOffCommand(LightAPI light){
this.light = light;
}
@Override
public void execute {
light.Off;
}
@Override
public void undo {
light.On;
}
}
增加音响音量的类:
/**
* Created b
原创不易,完成人机校验,阅读全文
常见问题
命令模式的三个角色分别是什么?
Invoker调用者如遥控器对象,Command命令接口或抽象类,Receiver命令具体实现类如电灯开关、音响音量加减对象;执行顺序是调用者、接收者、命令。
什么场景适合用命令模式?
当行为的请求者与实现者需要解耦,或要对行为进行记录、撤销重做、事务处理时适合使用;把一组行为抽象成命令对象即可实现松耦合,还支持Undo和Redo。