首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

设计模式-命令模式

定义

命令模式(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

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OTSIHW8sKzhvOeNdPNttB1hA0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券