美文网首页
職責鏈模式

職責鏈模式

作者: JohnSmith | 来源:发表于2015-06-18 01:31 被阅读30次

    定義

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

    要點

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

    核心代碼

    \\ 高階函數實現職責鏈,約定返回 '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);
    };
    

    相关文章

      网友评论

          本文标题:職責鏈模式

          本文链接:https://www.haomeiwen.com/subject/ljssqttx.html