设计模式

设计模式之命令模式-使用命令模式实现遥控器及总结

设计模式之命令模式-使用命令模式实现遥控器及总结先来看看项目结构:说明:1:命令接口对象2:电灯打开或关闭命令3:音响打开或关闭命令4:音响音量增加或减少命令来源:凯哥Java(kaigejava)电灯开或关代码:/***Createdbykaigejavaon2019/8/30.*关灯的命令对象*/publicclass LightOffCommand implements&

命令模式包含三个角色: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。

相关推荐