解决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); // 辅导员给你批准了!