不太理解javascript设计模式中命令模式 作用
天蓬老师
天蓬老师 2017-04-11 11:42:22
0
2
295

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

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中的方法有何不同?

点这里查看原文。

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!