职责链模式

55 阅读1分钟

职责链模式的定义

使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着链条处理请求,直到有一个对象可以处理为止。

构建灵活可拆分的职责链节点

  • 约定某个节点不能处理请求,则返回一个特定的字符串 'nextSuccessor' 来表示请求需要继续往后面传递。
let order500 = function( orderType, pay, stock) {
    if ( orderType === 1 && pay === true ) {
        console.log('500元定金订购,得到100优惠券')
    } else {
        return 'nextSuccessor';
    }
}
let order200 = function( orderType, pay, stock) {
    if ( orderType === 2 && pay === true ) {
        console.log('');
    } else {
        return 'nextSuccessor';
    }
}
let orderNormal = function ( orderType, pay, stock ) {
    if (stock > 0) {
        console.log('');
    } else {
        console.log('');
    }
}

// 定义构造函数Chain

let Chain = function (fn) {
     this.fn = fn;
     this.succesor = null;
}
Chain.prototype.setNextSuccessor = function (successor) {
     return this.successor = successor;
}
Chain.prototype.passRequest = function () {
    let ret = this.fn.apply(this, arguments);
    if (ret === 'nextSuccessor') {
        return this.successor && this.successor.passRequest.apply(this.successor, arguments);
    }
    return ret;
}

let chartOrder500 = new Chain( order500 );
let chartOrder200 = new Chain( order200 );
let chartOrderNormal = new Chain( orderNormal);

chainOrder500.setNextSuccessor( chainOrder200 );
chainOrder200.setNextSuccessor( chainOrderNormal );
  • 如此一来可以灵活的增删改节点的顺序

异步的职责链

  • 手动传递下一个节点

总结

职责链模式可以帮我们降低发起请求与处理请求对象之间的耦合性。