博客
关于我
命令模式
阅读量:580 次
发布时间:2019-03-09

本文共 2070 字,大约阅读时间需要 6 分钟。

说明

本文转载自:

命令(Command)

介绍

命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。

Intent

将命令封装成对象中,具有以下作用:

  • 使用命令来参数化其它对象
  • 将命令放入队列中进行排队
  • 将命令的操作记录到日志中
  • 支持可撤销的操作

Class Diagram

  • Command:命令
  • Receiver:命令接收者,也就是命令真正的执行者
  • Invoker:通过它来调用命令
  • Client:可以设置命令与命令的接收者

Implementation

设计一个遥控器,可以控制电灯开关。

public interface Command {       void execute();}
public class LightOnCommand implements Command {       Light light;    public LightOnCommand(Light light) {           this.light = light;    }    @Override    public void execute() {           light.on();    }}
public class LightOffCommand implements Command {       Light light;    public LightOffCommand(Light light) {           this.light = light;    }    @Override    public void execute() {           light.off();    }}
public class Light {       public void on() {           System.out.println("Light is on!");    }    public void off() {           System.out.println("Light is off!");    }}
/** * 遥控器 */public class Invoker {       private Command[] onCommands;    private Command[] offCommands;    private final int slotNum = 7;    public Invoker() {           this.onCommands = new Command[slotNum];        this.offCommands = new Command[slotNum];    }    public void setOnCommand(Command command, int slot) {           onCommands[slot] = command;    }    public void setOffCommand(Command command, int slot) {           offCommands[slot] = command;    }    public void onButtonWasPushed(int slot) {           onCommands[slot].execute();    }    public void offButtonWasPushed(int slot) {           offCommands[slot].execute();    }}
public class Client {       public static void main(String[] args) {           Invoker invoker = new Invoker();        Light light = new Light();        Command lightOnCommand = new LightOnCommand(light);        Command lightOffCommand = new LightOffCommand(light);        invoker.setOnCommand(lightOnCommand, 0);        invoker.setOffCommand(lightOffCommand, 0);        invoker.onButtonWasPushed(0);        invoker.offButtonWasPushed(0);    }}

JDK

你可能感兴趣的文章
Mysql学习总结(68)——MYSQL统计每天、每周、每月、每年数据 SQL 总结
查看>>
Mysql学习总结(69)——Mysql EXPLAIN 命令使用总结
查看>>
Mysql学习总结(6)——MySql之ALTER命令用法详细解读
查看>>
Mysql学习总结(70)——MySQL 优化实施方案
查看>>
Mysql学习总结(71)——MySQL 重复记录查询与删除总结
查看>>
Mysql学习总结(71)——数据库介绍(MySQL安装 体系结构、基本管理)再回顾
查看>>
Mysql学习总结(72)——MySQL 开发者开发,设计规范再总结
查看>>
Mysql学习总结(73)——MySQL 查询A表存在B表不存在的数据SQL总结
查看>>
Mysql学习总结(74)——慢SQL!压垮团队的最后一根稻草!
查看>>
Mysql学习总结(75)——并发量大、数据量大的互联网业务数据库设计军规
查看>>
Mysql学习总结(76)——MySQL执行计划(explain)结果含义总结
查看>>
Mysql学习总结(77)——温故Mysql数据库开发核心原则与规范
查看>>
Mysql学习总结(78)——MySQL各版本差异整理
查看>>
Mysql学习总结(79)——MySQL常用函数总结
查看>>
Mysql学习总结(7)——MySql索引原理与使用大全
查看>>
Mysql学习总结(80)——统计数据库的总记录数和库中各个表的数据量
查看>>
Mysql学习总结(81)——为什么MySQL不推荐使用uuid或者雪花id作为主键?
查看>>
Mysql学习总结(82)——MySQL逻辑删除与数据库唯一性约束如何解决?
查看>>
Mysql学习总结(83)——常用的几种分布式锁:ZK分布式锁、Redis分布式锁、数据库分布式锁、基于JDK的分布式锁方案对比总结
查看>>
Mysql学习总结(84)—— Mysql的主从复制延迟问题总结
查看>>