javascript设计模式——命令模式
命令模式:将命令封装成对象A,他们可以被绑定到任何对象(target)中,这些命令并不会执行具体的逻辑,也不关心目标能不能执行,如:
var A = function(target){
var open = function(){
return target.open&&target.open();
}
...
return {
open:open,
...
}
}
通过调用A(target),可以将命令绑定到期望的对象(命令接收者,或许是执行者)上,但不难发现,通过这种方式绑定的命令,只能存在于一个对象,将上述方法进行如下改造,即可为多个对象同时绑定命令:
var A = (function(){
var targets = []//已绑定命令的对象集合
return function(target){
targets.push(target)
var open = function(){
for(var i = 0,len = targets.length; i < len; i++)
targets[i].open&&targets[i].open();
}
...
return {
open:open,
...
}
}
}())
然后按照如下:
A(target1)
A(target2)
A(target3)
可为三个对象同时绑定命令,在需要发起请求的地方,执行A.open(),即可同时触发所有open命令
命令模式实际上就是分离请求的接收者与发起者的耦合关系!