本文实例讲述了JavaScript命令模式原理与用法。分享给大家供大家参考,具体如下: 第一,命令模式: (1)用于消除调用者和接收者之间直接的耦合的模式,并且可以对(调用这个过程进行留痕操作) (2)真的不要乱用这个模式,以为他使你简单调用写法变得非常的复杂和有些难以理解。 (3)你的业务出现了 (回退操作)(重做操作)的需求的时候你就要考虑使用这个模式了。 命令的原理: 一种情况为发出者直接作用于执行者,这样耦合度很高,另外一种情况为,在发出者和执行者之间增加一个用存储命令的命令访问库也即命令命令模式。 第二,现在我们通过一个需求来学习该模式 需求为: 1.有一个”添加流程的按钮”单 JavaScript中的命令模式是一种设计模式,它的主要目的是为了解耦调用者和接收者之间的关系,同时提供了一种机制来记录和回溯操作。在本文中,我们将深入探讨命令模式的原理、应用场景以及如何在JavaScript中实现它。 命令模式的基本思想是将请求封装为一个对象,这样就可以在不同的时间、不同地点对请求进行参数化,同时可以支持请求的撤销和重做操作。在JavaScript中,命令模式通常涉及到以下几个关键角色: 1. **命令接口(Command)**:定义了一个执行操作的接口。通常包含一个execute()方法,用于执行具体的业务逻辑。 2. **具体命令(Concrete Command)**:实现了命令接口,绑定接收者并存储了调用的请求信息。在JavaScript中,具体命令通常会保存执行操作所需的数据,如函数名、参数等。 3. **接收者(Receiver)**:知道如何执行与请求相关的操作。在我们的例子中,接收者是一个管理流程的对象,它负责创建新的流程描述。 4. **调用者(Caller)**:发起请求的对象,通常不关心接收者是谁,只关心命令的执行。在JavaScript中,调用者可能是用户界面中的按钮或其他交互元素。 5. **宏命令(Macro Command)**:可以组合多个命令,允许一次执行多个操作。 现在,让我们结合给定的例子来看如何实现命令模式: **接收者(Receiver)**: ```javascript function manager() { this.addFlow = function (id, value) { // 创建新的流程描述 var div = document.getElementById("div01"); var newFlow = document.createElement("div"); newFlow.setAttribute("id", id); newFlow.innerHTML = value; div.appendChild(newFlow); }; } ``` **命令访问库(Invoker)**: ```javascript manager.prototype.execute = (function () { // 命令对象 return function (command) { return this[command.method](command.id, command.value); }; })(); ``` **具体命令(Concrete Command)**: 在JavaScript中,具体命令通常是调用接收者的方法,同时保存了调用所需的参数。这里,我们创建了一个`command`对象,包含了`method`(调用的方法名)和`value`(调用所需的参数)。 **调用者(Caller)**: ```javascript var API = function () { this.addFlow = function () { // 把调用封装起来 var command = { method: "addFlow", id: new UUID().createUUID(), value: document.getElementById("flow").value }; // 把调用对象保存起来,用于回退和重做作用 commands.push(command); index = commands.length; // 调用接收者的execute方法 ma.execute(command); }; // 其他方法如ret()和again()实现回退和重做功能 }; ``` 在这个例子中,当用户点击“添加新流程”按钮时,`API.addFlow()`被调用,创建一个`command`对象,并将其添加到`commands`数组中。`ret()`和`again()`方法用于实现回退和重做功能,它们通过遍历`commands`数组并调用相应命令的`execute`方法来实现。 总结来说,JavaScript中的命令模式提供了更好的可扩展性和灵活性,使得系统能够轻松地支持新的操作,同时降低了组件之间的耦合。然而,正如描述中提到的,命令模式可能会增加代码的复杂性,因此在选择使用它时需要权衡利弊。当需要实现撤销/重做功能或减少组件间的直接依赖时,命令模式是一个很好的选择。
- 粉丝: 4
- 资源: 927
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
评论0