行为型模式之命令模式(Command)

一、模式介绍

命令模式的作用在于将请求的调用者与请求的处理者松耦合,进而使得调用者不必再关心请求的执行细节(如被谁执行的,怎么执行的等等),调用者和处理者可以自由变化。
实现方案:声明一个命令调用接口,客户端使用该接口中声明的命令统一执行方式执行命令,在具体命令的实现中查找并使用真实处理者中的具体方法。
另外,通过命令执行者的介入,可以方便地实现,历史命令记录、取消命令执行(undo)、重新执行命令(redo)、批量执行等等。

二、原理图

行为型模式之命令模式(Command)_第1张图片

三、示例代码

import java.util.ArrayList;
import java.util.List;

interface ComputerCommand {
    void execute();
    // undo execute
}
// Receiver
class Computer {
    void startup() {
        System.out.println("开机 ...");
    }
    void shutdown() {
        System.out.println("关机 ...");
    }
    void restart() {
        System.out.println("重启 ...");
    }
}
class StartupCommand implements ComputerCommand {
    Computer computer;
    public StartupCommand(Computer computer) {
        this.computer = computer;
    }
    @Override
    public void execute() {
        computer.startup();
    }
}
class ShutdownCommand implements ComputerCommand {
    Computer computer;
    public ShutdownCommand(Computer computer) {
        this.computer = computer;
    }
    @Override
    public void execute() {
        computer.shutdown();
    }
}
class RestartCommand implements ComputerCommand {
    Computer computer;
    public RestartCommand(Computer computer) {
        this.computer = computer;
    }
    @Override
    public void execute() {
        computer.restart();
    }
}
// Invoker:可实现 undo redo 等等
class CommandInvoker {
    List historyCommands = new ArrayList();
    void storeAndExecute(ComputerCommand command) {
        historyCommands.add(command);// 记录,可实现 undo redo 等等
        command.execute();
    }
}
public class Test {
    public static void main(String[] args) {
        Computer computer = new Computer();
        CommandInvoker invoker = new CommandInvoker();
        invoker.storeAndExecute(new StartupCommand(computer));
        invoker.storeAndExecute(new RestartCommand(computer));
        invoker.storeAndExecute(new ShutdownCommand(computer));
    }
}

输出结果:

开机 ...
重启 ...
关机 ...

你可能感兴趣的:(行为型模式之命令模式(Command))