《JS设计模式》读书笔记(四)

标签:JS 设计模式


读书笔记链接:

  • 《JS设计模式》读书笔记(一)
  • 《JS设计模式》读书笔记(二)
  • 《JS设计模式》读书笔记(三)
  • 《JS设计模式》读书笔记(五)
  • 《JS设计模式》读书笔记(六)
  • 《JS设计模式》读书笔记(七-完结)

命令模式

分离任务的请求者与执行者(谁做和做什么的分离),由于JS可以传递函数,命令模式在JS中是天生存在的。也因此JS中的命令模式的实现并不困难

更概括,分离了不变的抽象内容与多变的具体内容

// 这里抽象定义了请求者何时请求任务。
// 但这里也是具体地限定了onclick事件,所以这个函数在命令模式中不是必须的。
var setCommand = function(button, command) {
    button.onclick = function() {
        command.execute();
    }
}
// 这里抽象定义了任务执行者要做什么,
// 这里是必须的,以后扩展只要新增命令类就可以,类似策略模式
var SomeCommand = function(receiver) {
    this.receiver = receiver;
}
// execute是约定俗成的
SomeCommand.prototype.execute = function(){
    this.receiver.doSomething;
}
// 通上
SomeCommand.prototype.undo = function(){
    this.receiver.undoSomething;
}

// 这里选择具体的任务执行者
receiver = {doSomething: function(){}, undoSomething:function(){}}
var command = new SomeCommand(receiver)

// 这里选择任务请求者
setCommand(button, command)
// 也可以直接button.onclick = command.execute;
// 这里是规定了使用command.execute来实现解耦
// 因为setCommand不够抽象,所以以后还是会常变,怎么写都无所谓了,还是要改。


组合模式

将多个对象组合成一个大对象,外部可以将使用单一对象一样使用组合对象

书中的例子就是利用上一章的命令模式来介绍组合模式。使用多个命令组成一个大的命令。

var Marco


你可能感兴趣的:(《JS设计模式》读书笔记(四))