命令模式是一种行为型设计模式,它将请求封装成对象,从而允许使用不同的请求、队列请求或者记录日志请求等操作。这种模式的主要思想是将请求的发送者和接收者解耦。

在命令模式中,有四个主要角色:

1. 命令接口(Command): 声明了执行请求的方法。
public interface Command {
    void execute();
}

2. 具体命令(ConcreteCommand): 实现了命令接口,将一个接收者对象绑定于一个动作。
public class ConcreteCommand implements Command {
    private Receiver receiver;

    public ConcreteCommand(Receiver receiver) {
        this.receiver = receiver;
    }

    @Override
    public void execute() {
        receiver.action();
    }
}

3. 接收者(Receiver): 知道如何执行一个请求相关的操作。
public class Receiver {
    public void action() {
        System.out.println("Receiver: Performing action");
    }
}

4. 调用者/请求者(Invoker): 负责调用命令对象执行请求。
public class Invoker {
    private Command command;

    public void setCommand(Command command) {
        this.command = command;
    }

    public void executeCommand() {
        command.execute();
    }
}

5. 客户端代码: 创建命令对象、接收者对象和调用者对象,并将它们组合在一起。
public class Client {
    public static void main(String[] args) {
        // 创建接收者
        Receiver receiver = new Receiver();

        // 创建具体命令并绑定接收者
        Command command = new ConcreteCommand(receiver);

        // 创建调用者并设置命令
        Invoker invoker = new Invoker();
        invoker.setCommand(command);

        // 执行命令
        invoker.executeCommand();
    }
}

在这个例子中,通过命令模式,客户端可以创建不同的具体命令对象,并将它们和不同的接收者对象进行绑定。调用者对象负责执行命令,而客户端只需要和调用者对象打交道,不需要知道具体的命令和接收者是什么。这样就实现了命令发送者和接收者的解耦。命令模式还可以用于实现撤销、重做、日志记录等功能。


转载请注明出处:http://www.zyzy.cn/article/detail/13951/设计模式