定义
命令模式(Command Pattern):是一种结构型设计模式,它将请求封装为一个对象,从而使我们可以用不同的请求对客户进行参数化。命令模式使得我们可以通过调用对象的方式请求一个操作,而不是通过构造函数进行请求,从而使得代码更加灵活。
命令模式的关键点如下:
定义一个接收者和一个处理者。
接收者执行操作的代码与处理者执行操作的代码相互独立。
客户端发送消息给处理者,接收者收到消息执行相应的操作。
处理者负责存储客户端请求的状态,并在必要时通知客户端。
使用命令模式的场景包括但不限于:
当需要定义一个请求的对象,但是不知道如何完成该请求,可以使用命令模式。
当需要定义一个接受者和多个提供者,可以使用命令模式来创建和解构这些提供者。
当需要定义一个事件监听者,并且需要在多个事件处理者之间切换,可以使用命令模式。
当需要定义一个状态的容器,并且需要在不改变状态的情况下对状态进行修改,可以使用命令模式。
当需要定义一个工厂,用于创建多个类似的对象,可以使用命令模式。
命令模式是一种解决单线程多任务问题的设计模式。通过使用命令模式,我们可以将任务的请求和处理结果进行解耦,使得我们可以更容易地修改和扩展代码。同时,命令模式也可以提高程序的可读性和可维护性,使得代码更加易于理解和维护。
示例
interface Command {
void execute(String[] args);
}
// 定义具体命令
class CreateFileCommand implements Command {
public void execute(String[] args) {
// 根据给定的名称和内容创建文件的代码
System.out.println("创建文件 : " + String.join(", ", args));
}
}
class DeleteFileCommand implements Command {
public void execute(String[] args) {
// 根据给定的名称删除文件的代码
System.out.println("删除文件 : "+String.join(",",args) );
}
}
// 定义命令执行者
class CommandExecutor {
private Map commands = new HashMap();
public CommandExecutor() {
// 将具体命令与命令名称关联起来
commands.put("create", new CreateFileCommand());
commands.put("delete", new DeleteFileCommand());
}
public void executeCommand(String commandName, String[] args) {
// 查找对应的命令并执行
Command command = commands.get(commandName);
if (command != null) {
command.execute(args);
} else {
System.out.println("Unknown command: " + commandName);
}
}
}
// 使用命令执行者执行命令
public class Main {
public static void main(String[] args) {
CommandExecutor executor = new CommandExecutor();
executor.executeCommand("create", new String[]{"file.txt", "Hello World!"});
executor.executeCommand("delete", new String[]{"file.txt"});
executor.executeCommand("unknown", new String[]{});
}
}
执行输出
创建文件 : file.txt, Hello World!
删除文件 : file.txt
Unknown command: unknown
领取专属 10元无门槛券
私享最新 技术干货