职责链模式的定义
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着链条处理请求,直到有一个对象可以处理为止。
构建灵活可拆分的职责链节点
- 约定某个节点不能处理请求,则返回一个特定的字符串
'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 );
- 如此一来可以灵活的增删改节点的顺序
异步的职责链
- 手动传递下一个节点
总结
职责链模式可以帮我们降低发起请求与处理请求对象之间的耦合性。