首页 > 不太理解javascript设计模式中命令模式 作用

不太理解javascript设计模式中命令模式 作用

最近在看设计模式,不过在命令模式卡住了,不懂这个模式有什么作用。以下贴全部代码:

var CarManager  = (function(){

  var CarManager = {

      // request information
      requestInfo: function( model, id ){
        return "The information for " + model + " with ID " + id + " is foobar";
      },

      // purchase the car
      buyVehicle: function( model, id ){
        return "You have successfully purchased Item " + id + ", a " + model;
      },

      // arrange a viewing
      arrangeViewing: function( model, id ){
        return "You have successfully booked a viewing of " + model + " ( " + id + " ) ";
      }
      return CarManager ;

    };
})();

//调用CarManager的各种方法

加上CarManager.execute的理由,作者是这样解释的:

如果CarManager的核心API会发生改变的这种情况.这可能需要所有直接访问这些方法的对象也跟着被修改.这可以被看成是一种耦合,明显违背了OOP方法学尽量实现松耦合的理念.取而代之,我们可以通过更深入的抽象这些API来解决这个问题。
现在让我们来扩展我们的CarManager,以便我们这个命令模式的应用程序得到接下来的这种效果:接受任何可以在CarManager对象上面执行的方法,传送任何可以被使用到的数据,如Car模型和ID。

添加解耦代码都代码如下:

var CarManager  = (function(){

  var CarManager = {

      // request information
      requestInfo: function( model, id ){
        return "The information for " + model + " with ID " + id + " is foobar";
      },

      // purchase the car
      buyVehicle: function( model, id ){
        return "You have successfully purchased Item " + id + ", a " + model;
      },

      // arrange a viewing
      arrangeViewing: function( model, id ){
        return "You have successfully booked a viewing of " + model + " ( " + id + " ) ";
      }
      return CarManager ;

    };
})();

CarManager.execute = function ( name ) {
    return CarManager[name] && CarManager[name].apply( CarManager, [].slice.call(arguments, 1) );
    
console.log (CarManager.execute( "arrangeViewing", "Ferrari", "14523" ));
console.log (CarManager.execute( "requestInfo", "Ford Mondeo", "54323" ));
console.log (CarManager.execute( "requestInfo", "Ford Escort", "34232" ));
console.log (CarManager.execute( "buyVehicle", "Ford Escort", "34232" ));
};

我想问 CarManager.execute是如何达到解耦的。它和直接调用CarManager中的方法有何不同?

点这里查看原文。


这个讲的不是命令模式吧,你还是去看看『正统』的命令模式吧。

简单的讲命令模式是为了把命令的发起者与命令的执行彻底分开,比如可能命令发起者在发起这个命令后就马上被杀死了,但他发的这个命令仍旧有效当满足条件时就会被执行;比如由于命令与发起者无关,于是我们在某些情况下可以做到撤销之前执行过的命令。


学习学习,等大神回答

【热门文章】
【热门文章】