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命令

命令模式实际上就是分离请求的接收者与发起者的耦合关系!

 

posted @ 2017-04-10 21:47  土豆何必为难土豆  阅读(251)  评论(0编辑  收藏  举报