将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。

  1. // 接收者类
  2. class Receiver {
  3. execute() {
  4. console.log('接收者执行请求')
  5. }
  6. }
  7. // 命令者
  8. class Command {
  9. constructor(receiver) {
  10. this.receiver = receiver
  11. }
  12. execute () {
  13. console.log('命令');
  14. this.receiver.execute()
  15. }
  16. }
  17. // 触发者
  18. class Invoker {
  19. constructor(command) {
  20. this.command = command
  21. }
  22. invoke() {
  23. console.log('开始')
  24. this.command.execute()
  25. }
  26. }
  27. // 仓库
  28. const warehouse = new Receiver();
  29. // 订单
  30. const order = new Command(warehouse);
  31. // 客户
  32. const client = new Invoker(order);
  33. client.invoke()

优点

  • 对命令进行封装,使命令易于扩展和修改
  • 命令发出者和接受者解耦,使发出者不需要知道命令的具体执行过程即可执行

    缺点

  • 使用命令模式可能会导致某些系统有过多的具体命令类。