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

一、模式介绍

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

二、原理图


三、示例代码

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));
    }
}

输出结果:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值