一、介绍
命令模式解耦命令的发布者和执行者,各自负责自己的工作,发布者将命令发送出去,执行者是谁,具体执行过程发布者不需要关心,是一种低耦合、高内聚的设计模式。将命令抽象成一个对象,命令的具体实现效果交给子类去完成,保证了系统的拓展性。
二、UML类图
系统中,Command是抽象出来的命令抽象类,类中定义抽象方法execute,命令抽象类不关心命令想要实现什么样的效果或达到什么样的目的,只需要去执行就行,具体实现细节交给子类,所以只定义了一个execute方法;LightOnCommand和LightOffCommand是命令的实现类,分别实现开灯和关灯命令;LightReceiver是命令的接收者,命令的执行者,命令实现类依赖执行者对象完成对命令效果的实现;RemoteController是命令的发布者。在这个系统中命令发布者RemoteController和命令执行者LightReceiver并不直接产生交互,体现了低耦合设计理念,同时命令抽象成Command类,具体实现交给子类去处理,体现了多态特性。
三、代码实例
//命令抽象成一个抽象类或接口
public interface Command {
void execute();
}
public class LightOffCommand implements Command{
private final LightReceiver lightReceiver;
public LightOffCommand(LightReceiver lightReceiver) {
this.lightReceiver = lightReceiver;
}
@Override
public void execute() {
lightReceiver.lightOff();
}
}
public class LightOnCommand implements Command{
private final LightReceiver lightReceiver;
public LightOnCommand(LightReceiver lightReceiver) {
this.lightReceiver = lightReceiver;
}
@Override
public void execute() {
lightReceiver.lightOn();
}
}
public class LightReceiver {
public void lightOn(){
System.out.println("开灯");
}
public void lightOff(){
System.out.println("关灯");
}
}
public class RemoteController {
public void publish(Command command){
command.execute();
}
}
四、总结
命令模式解耦了命令的发布者和执行者,体现了Java低耦合、高内聚的设计理念。将命令抽象成对象而不是以一个参数的形式进行传递,这样增强了命令传递过程中的完整和正确,同时也利于发布者撤销命令,抽象类的使用也增强了系统的拓展性。