设计模式——命令模式

命令模式基本介绍

  1. 命令模式(Command Pattern):在软件设计中,我们经常需要向某些对象发送请求,但并不知道请求的接受者是谁,也不知道被请求的操作是具体如何执行
  2. 命令模式使得请求发送者和请求接受者之间松耦合。
  3. 命令模式支持撤销功能
如何解决

通过调用者发送指令,接受者接受指令并执行指令;

Http请求就是一种典型的命令模式

例子:

实现命令接口
public interface Command {
  
  //执行命令
  public void execute();
  
  //撤销命令
  public void undo();
}
开灯命令类
public class LightOnCommand implements Command {
  // 聚合LightReceiver
  List<LightReceiver> lights;
  
  public LightOnCommand(List<LightReceiver> lights) {
    this.lights = lights;
  }
  
  @Override
  public void execute(int num) {
    for (int i = 0; i < num; i++) {
      lights.get[i].on();
    }
  }
  
  @Override
  public void undo() {
		for (int i = 0; i < num; i++) {
      lights.get[i].off();
    }
  }
}
定义接受者(电灯操作接受者)
public class LightReceiver {
  
  public void on() {
    System.out.println("电灯打开了...");
  }
  
  public void off() {
    System.out.println("电灯关闭了...");
  }
}
命令发布者类
public class RemoteController {
  
  Command lightOnCommand;

  // 构造函数中,给这个发布命令者赋权(拥有开关灯的权利)
  public RemoteController(LightOnCommand command) {
    lightOnCommand = command;
  }
  
  // 命令开几盏灯
  public void lightOn(int num) {
    lightOnCommand.execute(num);
  }
}

这样通过命令类,实现了 命令发布者 与 执行者的 解耦;

命令发布者只管发命令(比如当前开几盏灯),具体执行是谁不关心,只要执行正确就行

类似将军发布命令,让100个小兵上前线,但不关心这一百个小兵具体是谁,只要有100个小兵执行就可以了
posted @ 2021-09-30 22:48  明月照江江  阅读(35)  评论(0编辑  收藏  举报