标签: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
网友评论