命令模式:命令也是类

命令模式是一种行为型设计模式,它允许将请求封装成对象,从而使您能够将不同的请求发送到队列或日志中,以及支持可撤销的操作。

示例代码

//定义命令接口
public interface Command {
    void execute();
}

//具体命令
public class ConcreteCommand implements Command {
    private Receiver receiver;

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

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

//接收者
public class Receiver {
    public void action() {
        System.out.println("接收者执行命令...");
    }
}

//调用者
public class Invoker {
    private Command command;

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

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

//客户端代码
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();
    }
}

在这个例子中,Command 接口定义了一个 execute() 方法,而 ConcreteCommand 类实现了该接口,并且持有一个对 Receiver 类的引用。Receiver 类定义了一个 action() 方法,用于执行实际的操作。Invoker 类也持有一个对 Command 接口的引用,并且通过调用该接口的 execute() 方法来执行对应的命令。

在客户端代码中,我们首先创建一个 Receiver 对象,然后将其传递给一个具体命令对象 ConcreteCommand 的构造函数中,以便让该命令对象知道它要执行哪个接收者对象的方法。接着,我们创建一个 Invoker 对象,并将具体命令对象设置为该调用者对象的命令。最后,我们执行命令,即调用 Invoker 对象的 executeCommand() 方法。

总之,命令模式使得您能够将请求封装成对象,从而可以通过参数化和传递不同的请求队列来参数化其他对象。这样做还支持可撤销的操作,因为您可以保存要执行的所有命令,以便稍后进行撤销或重做。

posted @ 2023-06-16 17:07  穆海如枫  阅读(20)  评论(0)    收藏  举报