zl程序教程

您现在的位置是:首页 >  前端

当前栏目

《JavaScript设计模式》——9.8 Command(命令)模式

2023-09-11 14:17:33 时间

本节书摘来自异步社区《JavaScript设计模式》一书中的第9章,第9.8节, 作者: 【美】Addy Osmani 译者: 徐涛 更多章节内容可以访问云栖社区“异步社区”公众号查看。

9.8 Command(命令)模式

Command模式旨在将方法调用、请求或操作封装到单一对象中,从而根据我们不同的请求对客户进行参数化和传递可供执行的方法调用。此外,这种模式将调用操作的对象与知道如何实现该操作的对象解耦,并在交换出具体类(对象)方面提供更大的整体灵活性。

用基于类的编程语言解释具体类是最恰当的,它们与抽象类的思想相关。一个抽象类定义一个接口,但不一定为它所有的成员函数提供实现。它作为一个基类,派生出其他类。实现缺失功能的派生类被称为一个具体的类(见图9-7)。
screenshot

Command模式背后的主要思想是:它为我们提供了一种分离职责的手段,这些职责包括从执行命令的任意地方发布命令以及将该职责转而委托给不同对象。

实施明智的、简单的命令对象将把action动作和调用该动作的对象绑定在一起。它们始终包括一个执行操作(如run()或execute())。所有具有相同接口的Command对象可以根据需要轻松交换,这被认为是该模式的一个更大好处。

为了演示Command模式,我们将创建一个简单的汽车购买服务。

(function () {

 var CarManager = {

 // 请求信息

 requestInfo: function (model, id) {

 return "The information for " + model + " with ID " + id + " is foobar";

 // 订购汽车

 buyVehicle: function (model, id) {

 return "You have successfully purchased Item " + id + ", a " + model;

 // 组织一个view

 arrangeViewing: function (model, id) {

 return "You have successfully booked a viewing of " + model+"("+id +")";

})();

看一下上面的代码,它可以通过直接访问对象轻松地调用我们的CarManager方法。我们认为这里没有任何错误,从技术上讲,它是完全有效的JavaScript。然而,它在有些情况下可能是不利的。

例如,试想如果CarManager里的核心API改变了会怎么样。这将要求程序里所有直接访问这些方法的对象都需要进行修改。这可能被视为一个耦合层,它实际上最大程度地违反了松耦合对象的OOP方法论。而我们可以通过进一步抽象API来解决这个问题。

现在让我们来扩展CarManager,这样Command模式下的应用程序会产生如下结果:接受任意可以在CarManager对象上执行的命名方法,传递可以使用的任意数据,如CarModel(模型)和ID。

这是我们希望能够实现的内容:

CarManager.execute("buyVehicle", "Ford Escort", "453543");

按照这个结构,我们现在应该为CarManager.execute方法添加一个定义,如下所示:

CarManager.execute = function (name) {

 return CarManager[name] CarManager[name].apply(CarManager, [].slice.call(arguments, 1));

因此我们最终的示例调用看起来是这样的:

CarManager.execute("arrangeViewing", "Ferrari", "14523");

CarManager.execute("requestInfo", "Ford Mondeo", "54323");

CarManager.execute("requestInfo", "Ford Escort", "34232");

CarManager.execute("buyVehicle", "Ford Escort", "34232");

js发布订阅模式 emit 方法取到 arguments 里第一个当做 event,根据 event 值去执行对应缓存列表中的函数(发布者发布事件到调度中心,调度中心处理代码)
HTML中的JavaScript文档模式 HTML中的JavaScript文档模式是指浏览器在解析HTML文档时采用的模式,它可以影响文档的呈现方式和JavaScript的行为。本文将介绍文档模式的分类和作用,以及如何设置文档模式。
异步社区 异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。