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

来源:互联网 发布:搜索引擎优化广告 编辑:程序博客网 时间:2024/05/21 15:07

一、模式介绍

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

二、原理图


三、示例代码

import java.util.ArrayList;import java.util.List;interface ComputerCommand {    void execute();    // undo execute}// Receiverclass 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));    }}

输出结果:

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

原创粉丝点击