JS设计模式-06-命令模式

1. 模式

定义:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。
分类:行为型模式
适用性

  • Command 模式是回调(callback)机制的一个面向对象的替代品。所谓回调函数是指函数先在某处注册,而它将在稍后某个需要的时候被调用。
  • 在不同的时刻指定、排列和执行请求。Command 对象可以有一个与初始请求无关的生存期。
  • 支持取消操作。需要定义 Unexecute 操作来取消 Execute 操作调用的效果。
  • 支持修改日志,这样当系统崩溃时,这些修改可以被重做一遍。
  • 用构建在原语操作上的高层操作构造一个系统。例如构建事务(Transaction)系统。

2. 任务

  1. 场景:顾客去餐厅点餐,服务员将菜单交与厨师处理 clientA,clientB,invoker,recieverA,recieverB
  2. 顾客
clientA: {
    param: ["doingA1", "doingA2"];
}
clientB: {
    param: ["doingA1", "doingB1"];
}
  1. 厨师
recieverA:{
   action:function(something){
      console.log(`A...${something}`);
   }
}
recieverB:{
   action:function(something){
      console.log(`B...${something}`);
   }
}
  1. 服务员
invoker:{
   addCommand:function (command){
      this.commands.push(command);
    }
   excute:function(command){}
}

3. JS 实现

let clientA = {
    param: ["doingA1", "doingA2"],
};
let clientB = {
    param: ["doingA1", "doingB1"],
};
let recieverA = {
    action: function (something) {
        console.log(`A...${something}`);
    },
};
let recieverB = {
    action: function (something) {
        console.log(`B...${something}`);
    },
};
let invoker = {
    commands: [],
    addCommand: function (command) {
        this.commands.push(command);
    },
    excute: function () {
        for (let i = 0; i < this.commands.length; i++) {
            this.commands[i]();
        }
    },
};

let commandA = function () {
    return recieverA.action(clientA.param);
};
let commandB = function () {
    return recieverB.action(clientB.param);
};
invoker.addCommand(commandA);
invoker.addCommand(commandB);
invoker.excute();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值