Java命令模式:设计模式的四人帮(Java命令模式详解:深入理解四人帮设计模式)
原创
一、引言
在软件开发中,设计模式是一套被反复使用、多数人知晓、经过分类编目、代码简洁、富有表达力的解决方案。设计模式不仅仅减成本时间了代码的可维护性,还令代码更加易于领会和扩展。四人帮(Gamma, Helm, Johnson, Vlissides)所著的《设计模式:可复用面向对象软件的基础》一书,系统地介绍了23种经典设计模式,其中命令模式(Command Pattern)是一种非常实用的行为型模式。
二、命令模式概述
命令模式是一种将请求封装成对象的设计模式,令用户对请求的发送和接收进行解耦。命令模式重点包括以下几个角色:
- 命令(Command)接口:定义了执行操作的接口。
- 具体命令(ConcreteCommand)类:实现了命令接口,持有接收者的实例,并在实现时调用接收者的相关操作。
- 请求者(Invoker)类:负责调用命令对象执行请求。
- 接收者(Receiver)类:负责执行与请求相关的操作。
- 客户(Client)类:负责创建具体命令对象,并且设置其接收者。
三、Java命令模式实现
下面将通过一个明了的例子来展示Java命令模式的实现。
3.1 定义命令接口
public interface Command {
void execute();
}
3.2 定义具体命令类
public class LightOnCommand implements Command {
private Light light;
public LightOnCommand(Light light) {
this.light = light;
}
@Override
public void execute() {
light.on();
}
}
public class LightOffCommand implements Command {
private Light light;
public LightOffCommand(Light light) {
this.light = light;
}
@Override
public void execute() {
light.off();
}
}
3.3 定义接收者类
public class Light {
public void on() {
System.out.println("Light is on");
}
public void off() {
System.out.println("Light is off");
}
}
3.4 定义请求者类
public class RemoteControl {
private Command command;
public void setCommand(Command command) {
this.command = command;
}
public void pressButton() {
command.execute();
}
}
3.5 客户端使用
public class Main {
public static void main(String[] args) {
Light light = new Light();
Command lightOn = new LightOnCommand(light);
Command lightOff = new LightOffCommand(light);
RemoteControl remoteControl = new RemoteControl();
remoteControl.setCommand(lightOn);
remoteControl.pressButton(); // 输出:Light is on
remoteControl.setCommand(lightOff);
remoteControl.pressButton(); // 输出:Light is off
}
}
四、命令模式的优点
命令模式具有以下优点:
- 降低系统的耦合度:请求者与接收者之间无需彼此了解,只通过命令对象进行交互。
- 易于扩展:可以很容易地添加新的命令类。
- 组合命令:可以将多个命令组合成一个宏命令。
- 赞成撤销操作:命令模式可以实现撤销(undo)和重做(redo)功能。
五、命令模式的缺点
命令模式也有以下缺点:
- 命令对象的创建开销:每个具体命令类都需要一个对应的对象,如果命令过多,会消耗较多的内存。
- 过度的设计:对于一些明了的操作,使用命令模式或许会显得显著繁复。
六、命令模式的应用场景
以下是一些适合使用命令模式的应用场景:
- 需要对操作进行记录、撤销或重做。
- 需要将操作请求发送给多个接收者。
- 需要赞成撤销操作。
- 需要赞成操作的组合。
七、总结
命令模式是一种非常有用的设计模式,通过将请求封装成对象,实现了请求者与接收者之间的解耦。在实际项目中,合理使用命令模式可以减成本时间代码的可维护性和可扩展性。本文详细介绍了命令模式的概念、实现方案以及优缺点,愿望对大家有所帮助。