職責鏈模式

定義

使多個對象都有機會處理請求,將這些對象連成一條鏈,並沿著這條鏈傳遞該請求,直到有一個對象處理它為止。

要點

  • 職責鏈模式只需要知道鏈中的第一個節點,從而弱化了發送者和一組接收者之間的強聯繫。
  • 異步的職責鏈:需要給職責鏈節點對象增加一個手動傳遞請求到下一個節點的方法(而不是根據返回值來判斷是否繼續傳遞請求)。
  • 職責鏈模式中的節點對象可以靈活地拆分重組:增加或者刪除一個節點,或者改變節點在鏈中的位置都是輕而易舉的事情。
  • 職責鏈模式也可以手動指定起始節點。
  • 對於所有對象都不能處理請求的情況,可以在鏈尾增加一個保底的接受者節點來處理,例如拋出一個錯誤異常。
  • 從性能方面考慮,要避免過長的職責鏈帶來的性能損耗。

核心代碼

\\ 高階函數實現職責鏈,約定返回 'nextSuccessor' 代表「繼續傳遞請求」
Function.prototype.after = function(fn) {
    var self = this;
    return function() {
        var ret = self.apply(this, arguments);
        if (ret === 'nextSuccessor') {
            return fn.apply(this, arguments);
        }
        return ret;
    };
};

var order = order500.after(order200).after(orderNormal);
order(1, true, 500);
\\ 手動傳遞請求到下一個節點的方法
Chain.prototype.next = function() {
    return this.successor && this.successor.passRequest.apply(this.successor, arguments);
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 這一切就是這麼發生的:維克多在錯誤的時間出現在了錯誤的地點。或者是倒過來說也行,看你的問是誰。 儘管時間早就已經到...
    AmandaHuang阅读 2,245评论 0 1
  • 文|猫一姑娘 广东人喜欢吃“早茶”。 无论是工作日,还是节假日我们总能看到酒楼、茶楼中坐品早茶的人们。可能有的朋友...
    猫一姑娘阅读 1,088评论 7 9
  • 昨天下午,全国著名的写字教育专家胡一帆先生,来我校给全体语文老师做了一场题为“好字好人生”的精彩书法讲座。作为一名...
    726fd54cb168阅读 1,702评论 0 7
  • 转眼我已进入第二十五个年头,已经平淡的走过了生命的4分之一or三分之一,而我却还像个长不大的小孩子。 ...
    青春染执流年阅读 207评论 1 0
  • 睡一个好觉, 做一个好梦, 梦一个心愿, 愿一个美好, 好一个未来, 来一个奋斗。 你总说, 我的梦很美。 我总笑...
    小剧在成长阅读 275评论 2 4