前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >命令模式

命令模式

作者头像
晚上没宵夜
发布2022-05-09 21:14:37
1750
发布2022-05-09 21:14:37
举报
文章被收录于专栏:Howl同学的学习笔记

手腕旧伤又疼了,想当键盘侠都难,最近都没有输入输出,颓废了

1. 命令模式(Command Pattern)

请求 封闭成对象,以便使用命令来参数化其它对象,或者将命令对象放入队列中进行排队对行为进行记录、撤销或重做、事务等处理。应用在请求行为和实现者需要解耦的场合,以便撤销等动作

命令模式的组成:

  • Command:封装命令的对象
  • Receiver:命令真正的执行者
  • Invoker:通过它来调用命令
  • Client:可以设置命令与命令的接收者

2. 流程

实现一个基于命令模式的开关灯功能

2.1 Receiver(灯 Light)

代码语言:javascript
复制
public class Light {

    public void on() {
        System.out.println("Light is on");
    }

    public void off() {
        System.out.println("Light is off");
    }
}

2.2 Command 命令

代码语言:javascript
复制
// 命令接口
public interface Command {
    void execute();
}
代码语言:javascript
复制
// 命令接口
public class LightOnCommand implements Command {
    Light light;

    public LightOnCommand(Light light) {
        this.light = light;
    }

    @Override
    public void execute() {
        light.on();
    }
}
代码语言:javascript
复制
// 命令接口
public class LightOffCommand implements Command {
    Light light;

    public LightOffCommand(Light light) {
        this.light = light;
    }

    @Override
    public void execute() {
        light.off();
    }
}

2.3 Invoker

代码语言:javascript
复制
public class Invoker {
    private List<Command> commands = new LinkedList<>();

    public void receiveCommand(Command command) {
        commands.add(command);
    }

    public void executeCommand() {
        for (Command temp : commands) {
            temp.execute();
        }
        // 这里可以记录命令的执行顺序
        commands.clear();
    }
}

2.4 Client

代码语言:javascript
复制
public class Client {
    public static void main(String[] args) {
        Light light = new Light();
        LightOnCommand lightOnCommand = new LightOnCommand(light);
        LightOffCommand lightOffCommand = new LightOffCommand(light);
        Invoker invoker = new Invoker();
        invoker.receiveCommand(lightOnCommand);
        invoker.receiveCommand(lightOffCommand);
        invoker.executeCommand();
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-09-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 命令模式(Command Pattern)
  • 2. 流程
    • 2.1 Receiver(灯 Light)
      • 2.2 Command 命令
        • 2.3 Invoker
          • 2.4 Client
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档