抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

解决if语句太多太复杂的问题,不过创建对象也是很吃性能的。。

顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。

在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。

// 责任链模式:
// 假如规定学生请假小于或等于 2 天,班主任可以批准;
// 小于或等于 7 天,系主任可以批准;
// 小于或等于 10 天,院长可以批准;
// 其他情况不予批准;
// 这个实例适合使用职责链模式实现。

function 辅导员(day: number) {
  if (day <= 2) {
    console.log("辅导员给你批准了!");
  } else {
    return "nextprocessor";
  }
}

function 系主任(day: number) {
  if (day <= 7) {
    console.log("系主任给你批准了!");
  } else {
    return "nextprocessor";
  }
}

function 院长(day: number) {
  if (day <= 10) {
    console.log("院长给你批准了!");
  } else {
    return "nextprocessor";
  }
}

function 不准假(day: number) {
  console.log("您已被开除了~");
  return null;
}

class Chian {
  nextLeader: Chian | null = null;
  leader: Function;

  constructor(leader: Function) {
    this.leader = leader;
  }

  setNextprocessor(processor: Chian) {
    this.nextLeader = processor;
  }

  passRequest(day: number) {
    const ret = this.leader(day);

    if (ret === "nextprocessor") {
      this.nextLeader && this.nextLeader.passRequest.call(this.nextLeader, day);
    }
  }
}

const 辅导员_chain = new Chian(辅导员);
const 系主任_chain = new Chian(系主任);
const 院长_chain = new Chian(院长);
const 不准假_chain = new Chian(不准假);

辅导员_chain.setNextprocessor(系主任_chain);
系主任_chain.setNextprocessor(院长_chain);
院长_chain.setNextprocessor(不准假_chain);

辅导员_chain.passRequest(11); // 您已被开除了~
辅导员_chain.passRequest(7); // 系主任给你批准了!
辅导员_chain.passRequest(1); // 辅导员给你批准了!

评论