SOURCE

// 使用职责链模式再次重构 -- 利用开闭原则
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 命令行工具 X clear

                    
>
console