0
点赞
收藏
分享

微信扫一扫

npm命令卡在reify:eslint: timing reifyNode:node_modules/webpack Completed in 475ms不动

大自然在召唤 04-14 09:30 阅读 1

概念:命令模式(Command Pattern)又称行动(Action)模式或交易(Transaction)模式。将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。

  • 抽象命令:定义要执行的操作。
  • 具体命令:持有命令的真正执行者,并调用其具体操作。
  • 命令接收者:真正的命令执行者,定义所有的具体操作。
  • 命令调用者:接收命令,并调用命令的具体行为。

接下来用一个开关灯的例子,帮助大家理解这个结构。

public interface Command {
    void execute();
}

public class LightOnCommand implements Command {
    private final Light light;
    public LightOnCommand(Light light) {
        this.light = light;
    }
    @Override
    public void execute() {
        light.lightOn();
    }
}

public class LightOffCommand implements Command {
    private final Light light;
    public LightOffCommand(Light light) {
        this.light = light;
    }
    @Override
    public void execute() {
        light.lightOff();
    }
}

public class Light {
    public void lightOn() {
        System.out.println("开灯");
    }
    public void lightOff() {
        System.out.println("关灯");
    }
}

public class Invoker {
    private final Command command;
    public Invoker(Command command) {
        this.command = command;
    }
    public void invoke() {
        if (command != null) {
            command.execute();
        }
    }
}

public class Demo {
    public static void main(String[] args) {
        Light light = new Light();
        Invoker invokerOn = new Invoker(new LightOnCommand(light));
        Invoker invokerOff = new Invoker(new LightOffCommand(light));
        invokerOn.invoke();
        invokerOff.invoke();
    }
}

如果大家需要视频版本的讲解,欢迎大家关注我的B站:

十五、设计模式之命令模式讲解

举报

相关推荐

0 条评论