// 使用职责链模式再次重构 -- 利用开闭原则
function order500(orderType, isPay, count) {
if (orderType === 1 && isPay) { // 充值达到500
console.log('您中奖了100元');
} else {
// 传给下一个人
return 'next';
}
}
function order200(orderType, isPay, count) {
if (orderType === 2 && isPay) { // 充值达到200
console.log('您中奖了20元');
} else {
// 传给下一个人
return 'next';
}
}
function orderDefault(orderType, isPay, count) {
if (count > 0) {
console.log('您已抽到10元');
} else {
console.log('谢谢参与');
}
}
// 职责链关系对象
function Chain(fn) {
this.fn = fn;
this.next = null;
}
// 在原型上添加方法
Chain.prototype.setNext = function(next) {
this.next = next;
}
// 传递到下一个人
Chain.prototype.passRequest = function(next) {
let ret = this.fn.apply(this, arguments); // order500 order200等函数
if (ret === 'next') { // 传给下一个人
this.next && this.next.passRequest.apply(this.next, arguments)
}
}
// 实例化责任链对象
let chainOrder500 = new Chain(order500)
let chainOrder200 = new Chain(order200)
let chainOrderDefault = new Chain(orderDefault)
// 把链子串起来
chainOrder500.setNext(chainOrder200)
chainOrder200.setNext(chainOrderDefault)
// 调用
chainOrder500.passRequest(1, true, 500)
console