命令模式

命令模式是指将一个请求封装为对象,从而使代码可用不同的请求对客户端进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。命令模式包含命令调用者、命令接受者以及若干命令实体类。客户端实例化命令并传入命令调用者,命令调用者通过命令实体间接调用命令接受者的方法。

命令模式的优势

使用命令模式抽象代码逻辑有以下好处:

  1. 命令模式能够容易的设计命令队列
  2. 在需要的情况下能够方便的将命令记入日志
  3. 接受请求的一方否决命令很容易实现
  4. 便于对命令撤销和重做
  5. 命令和执行者解耦,添加命令十分容易

命令模式示例代码

下面代码是一个命令模式的实现例子。

Receiver.java

public class Receiver {
    public void action() {
        System.out.println("执行请求");
    }
}

Command.java

public abstract class Command {
    protected Receiver receiver;

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

    abstract public void execute();
}

ConcreteCommand.java

public class ConcreteCommand extends Command {
    public ConcreteCommand(Receiver receiver) {
        super(receiver);
    }

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

Invoker.java

public class Invoker {
    private Command command;

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

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

Main.java

public class Main {
    public static void main(String[] args) {
        Receiver receiver = new Receiver();
        Command command = new ConcreteCommand(receiver);
        Invoker invoker = new Invoker();
        invoker.setCommand(command);
        invoker.executeCommand();
    }
}
作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap