数码资讯
对Javascript系列的深入理解(34):对设计模式的命令模式的详细解释
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
介绍
命令模式的定义(命令)是将请求封装成一个对象,这样你可以参数化客户的不同要求,请求队列,记录请求日志,以及执行撤销操作。也就是说,该模式的修改设计封装调用,请求,和操作的函数为单一的对象,然后一系列的对象处理。此外,命令对象和接收对象可以通过调用实现特定功能的对象解耦。
文本
让我们通过汽车购买计划来展示这个模型,首先定义车辆购买的特定操作类:
复制代码代码如下所示:
$(函数(){())
无功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
总结
命令模式更容易设计命令队列,更容易在需要的情况下将命令包含在日志中,是否接受请求并允许该方决定调用,也可以实现请求的撤销和复位,而且由于新类不影响其他类,所以很容易实现。
但敏捷原则告诉我们不要添加代码的炒作,其实不需要的功能,如果不清楚系统命令模式,一般不会意识到,事实上,在需求的模型重建的实现并不困难,只有在真正的需求如撤销和恢复操作的功能,为原命令模式重构的代码是有意义的。
命令模式的定义(命令)是将请求封装成一个对象,这样你可以参数化客户的不同要求,请求队列,记录请求日志,以及执行撤销操作。也就是说,该模式的修改设计封装调用,请求,和操作的函数为单一的对象,然后一系列的对象处理。此外,命令对象和接收对象可以通过调用实现特定功能的对象解耦。
文本
让我们通过汽车购买计划来展示这个模型,首先定义车辆购买的特定操作类:
复制代码代码如下所示:
$(函数(){())
无功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
总结
命令模式更容易设计命令队列,更容易在需要的情况下将命令包含在日志中,是否接受请求并允许该方决定调用,也可以实现请求的撤销和复位,而且由于新类不影响其他类,所以很容易实现。
但敏捷原则告诉我们不要添加代码的炒作,其实不需要的功能,如果不清楚系统命令模式,一般不会意识到,事实上,在需求的模型重建的实现并不困难,只有在真正的需求如撤销和恢复操作的功能,为原命令模式重构的代码是有意义的。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。