另外,职责链模式使得程序中多了一些节点对象,可能在某一次的请求传递过程中,大部分节点并没有起到实质性的作用,它们的作用仅仅是让请求传递下去,从性能方面考虑,要避免过长的职责链带来的性能损耗
AOP
在之前的职责链实现中,利用了一个Chain类来把普通函数包装成职责链的节点 。其实利用JAVAscript的函数式特性,有一种更加方便的方法来创建职责链
下面改写一下Function.prototype.after函数,使得第一个函数返回'nextSuccessor'时,将请求继续传递给下一个函数,无论是返回字符串'nextSuccessor'或者false都只是一个约定,当然在这里也可以让函数返回false表示传递请求,选择'nextSuccessor'字符串是因为它看起来更能表达我们的目的,代码如下

文章插图
用AOP来实现职责链既简单又巧妙,但这种把函数叠在一起的方式,同时也叠加了函数的作用域,如果链条太长的话,也会对性能有较大的影响
文件上传
迭代器模式中,有一个获取文件上传对象的例子:当时创建了一个迭代器来迭代获取合适的文件上传对象,其实用职责链模式可以更简单,完全不用创建这个多余的迭代器,完整代码如下

文章插图
在JavaScript开发中,职责链模式是最容易被忽视的模式之一 。实际上只要运用得当,职责链模式可以很好地帮助我们管理代码,降低发起请求的对象和处理请求的对象之间的耦合性 。职责链中的节点数量和顺序是可以自由变化的,可以在运行时决定链中包含哪些节点
无论是作用域链、原型链,还是DOM节点中的事件冒泡,都能从中找到职责链模式的影子 。职责链模式还可以和组合模式结合在一起,用来连接部件和父部件,或是提高组合对象的效率
总结
优点
- 解耦了请求发送者和度个接收者之间的复杂关系,不需要知道链中哪个节点能处理你的请求,只需要把请求传递到第一个节点即可 。
- 链中的节点对象可以灵活地拆分重组,增加或删除一个节点,或者改变节点的位置都是很简单的事情 。
- 我们还可以手动指定节点的起始位置,并不是说非得要从其实节点开始传递的.
职责链模式中多了一点节点对象,可能在某一次请求过程中,大部分节点没有起到实质性作用,他们的作用只是让请求传递下去,从性能方面考虑,避免过长的职责链提高性能 。
推荐阅读
- JavaScript命名空间常用方法
- Strategy Pattern JavaScript设计模式之策略模式
- JavaScript中变量和作用域
- JavaScript都得知道这3个数组方法
- javascript 创建对象常用几种方式
- JavaScript轻应用PWA实践全过程
- 8 个提高 JavaScript 性能的方法
- JavaScript获取json中key所对应的value值的简单方法
- JavaScript中执行上下文和执行栈
- 不可不知的 5 种 JavaScript 代码编辑器
