设计模式(21)-- 命令模式

简介: 设计模式(21)-- 命令模式

命令模式基本介绍


1dc618a0ed9580ce8bfa6facb208c08f.png


命令模式的原理类图


5d4c6812c8535adbb050f4ddf2e1bce8.png


命令模式解决智能生活项目



46a9d80a6e05e4e3b19d57a0ee70bcdf.png66ba272a0bfc97be54a5fa679e3d5482.png


LightReceiver

1dc618a0ed9580ce8bfa6facb208c08f.png

Command

5d4c6812c8535adbb050f4ddf2e1bce8.png

NoCommand

46a9d80a6e05e4e3b19d57a0ee70bcdf.png

LightOnCommand

66ba272a0bfc97be54a5fa679e3d5482.png

LightOffCommand

88b9988b40447cb37c7e3c492d49867f.png


TVReceiver


80308c27701d3aead18db6c7b167f308.png1014213c4196c8798c8417b952a8a253.png20190217105350936.jpg


public class RemoteController {
  // 开 按钮的命令数组
  Command[] onCommands;
  Command[] offCommands;
  // 执行撤销的命令
  Command undoCommand;
  // 构造器,完成对按钮初始化
  public RemoteController() {
  onCommands = new Command[5];
  offCommands = new Command[5];
  for (int i = 0; i < 5; i++) {
    onCommands[i] = new NoCommand();
    offCommands[i] = new NoCommand();
  }
  }
  // 给我们的按钮设置你需要的命令
  public void setCommand(int no, Command onCommand, Command offCommand) {
  onCommands[no] = onCommand;
  offCommands[no] = offCommand;
  }
  // 按下开按钮
  public void onButtonWasPushed(int no) { // no 0
  // 找到你按下的开的按钮, 并调用对应方法
  onCommands[no].execute();
  // 记录这次的操作,用于撤销
  undoCommand = onCommands[no];
  }
  // 按下关按钮
  public void offButtonWasPushed(int no) { // no 0
  // 找到你按下的关的按钮, 并调用对应方法
  offCommands[no].execute();
  // 记录这次的操作,用于撤销
  undoCommand = offCommands[no];
  }
  // 按下撤销按钮
  public void undoButtonWasPushed() {
  undoCommand.undo();
  }
}


Client


public class Client {
  public static void main(String[] args) {
  // TODO Auto-generated method stub
  //使用命令设计模式,完成通过遥控器,对电灯的操作
  //创建电灯的对象(接受者)
  LightReceiver lightReceiver = new LightReceiver();
  //创建电灯相关的开关命令
  LightOnCommand lightOnCommand = new LightOnCommand(lightReceiver);
  LightOffCommand lightOffCommand = new LightOffCommand(lightReceiver);
  //需要一个遥控器
  RemoteController remoteController = new RemoteController();
  //给我们的遥控器设置命令, 比如 no = 0 是电灯的开和关的操作
  remoteController.setCommand(0, lightOnCommand, lightOffCommand);
  System.out.println("--------按下灯的开按钮-----------");
  remoteController.onButtonWasPushed(0);
  System.out.println("--------按下灯的关按钮-----------");
  remoteController.offButtonWasPushed(0);
  System.out.println("--------按下撤销按钮-----------");
  remoteController.undoButtonWasPushed();
  System.out.println("=========使用遥控器操作电视机==========");
  TVReceiver tvReceiver = new TVReceiver();
  TVOffCommand tvOffCommand = new TVOffCommand(tvReceiver);
  TVOnCommand tvOnCommand = new TVOnCommand(tvReceiver);
  //给我们的遥控器设置命令, 比如 no = 1 是电视机的开和关的操作
  remoteController.setCommand(1, tvOnCommand, tvOffCommand);
  System.out.println("--------按下电视机的开按钮-----------");
  remoteController.onButtonWasPushed(1);
  System.out.println("--------按下电视机的关按钮-----------");
  remoteController.offButtonWasPushed(1);
  System.out.println("--------按下撤销按钮-----------");
  remoteController.undoButtonWasPushed();
  }
}


运行结果:

1dc618a0ed9580ce8bfa6facb208c08f.png


命令模式在Spring框架JdbcTemplate应用的源码分析


5d4c6812c8535adbb050f4ddf2e1bce8.png


命令模式的注意事项和细节


46a9d80a6e05e4e3b19d57a0ee70bcdf.png



相关文章
|
6月前
|
设计模式 UED
二十三种设计模式:解锁软件开发的神器:命令模式与撤销重做功能
二十三种设计模式:解锁软件开发的神器:命令模式与撤销重做功能
165 0
|
2月前
|
设计模式 存储 算法
Java设计模式-命令模式(16)
Java设计模式-命令模式(16)
|
3月前
|
设计模式 存储 Java
【十二】设计模式~~~行为型模式~~~命令模式(Java)
文章详细介绍了命令模式(Command Pattern),这是一种对象行为型模式,用于将请求封装成对象,实现请求发送者与接收者的解耦,从而降低系统耦合度、提高灵活性,并支持命令的排队、记录、撤销和恢复操作。通过案例分析、结构图、时序图和代码示例,文章展示了命令模式的组成部分、实现方式和应用场景,并讨论了其优点、缺点和适用情况。
|
4月前
|
设计模式 JavaScript API
js设计模式【详解】—— 命令模式
js设计模式【详解】—— 命令模式
44 6
|
5月前
|
设计模式
命令模式-大话设计模式
命令模式-大话设计模式
|
5月前
|
设计模式 Java uml
必知的技术知识:JAVA【设计模式】命令模式
必知的技术知识:JAVA【设计模式】命令模式
28 0
|
5月前
|
设计模式 Java
Java设计模式之命令模式详解
Java设计模式之命令模式详解
|
5月前
|
设计模式
设计模式之命令模式
设计模式之命令模式
|
6月前
|
设计模式 Java 调度
【设计模式系列笔记】命令模式
命令模式是一种行为设计模式,它将请求封装成一个对象,从而允许使用不同的请求、队列或日志请求参数化客户端对象,同时支持撤销操作。
70 1
|
6月前
|
设计模式 Java 调度
小谈设计模式(24)—命令模式
小谈设计模式(24)—命令模式