職責鏈模式

定義

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

要點

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

核心代碼

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

你可能感兴趣的:(職責鏈模式)