介绍

命令模式的定义(命令)是将请求封装成一个对象,这样你可以参数化客户的不同要求,请求队列,记录请求日志,以及执行撤销操作。也就是说,该模式的修改设计封装调用,请求,和操作的函数为单一的对象,然后一系列的对象处理。此外,命令对象和接收对象可以通过调用实现特定功能的对象解耦。

文本

让我们通过汽车购买计划来展示这个模型,首先定义车辆购买的特定操作类:

复制代码代码如下所示:

$(函数(){())

无功carmanager = { {

请求信息

RequestInfo:功能(模型、ID){

return'the信息+模型+

ID+编号+foobar;

},

买车

BuyVehicle:功能(模型、ID){

return'you成功购买项目

+ +,+模型;

},

视图

arrangeviewing:函数(模型、ID){

return'you成功预订观看

+模型+;

}

};

});



在上面的代码一看,只需执行经理的命令调用的功能,但在某些情况下,我们不想直接调用里面的对象。这会增加对象和对象之间的依赖关系。现在让我们将这carmanager使它能接受来自carmanager对象包括模型和车ID.根据命令模式的定义任何加工的要求,我们要实现以下这个函数调用:

复制代码代码如下所示:

carmanager.execute({命令:buyvehicle



基于这种需求,我们可以实现这样的carmanager.execute方法:

复制代码代码如下所示:

carmanager.execute =函数(命令){

返回carmanager { }(command.model命令,要求,命令。CARiD);

};



转换后,调用更加简单,下面的调用可以实现(当然,一些不寻常的细节或需要改进):

复制代码代码如下所示:

carmanager.execute({要求:arrangeviewing

carmanager.execute({请求:请求的统计信息

carmanager.execute({请求:请求的统计信息

carmanager.execute({要求:buyvehicle



总结

命令模式更容易设计命令队列,更容易在需要的情况下将命令包含在日志中,是否接受请求并允许该方决定调用,也可以实现请求的撤销和复位,而且由于新类不影响其他类,所以很容易实现。

但敏捷原则告诉我们不要添加代码的炒作,其实不需要的功能,如果不清楚系统命令模式,一般不会意识到,事实上,在需求的模型重建的实现并不困难,只有在真正的需求如撤销和恢复操作的功能,为原命令模式重构的代码是有意义的。