介绍
责任链模式,它允许将请求沿着处理链传递,直到有一个处理者能够处理该请求为止。
主要概念:
- 处理者接口(Handle Interface):定义处理接口的请求,通常包含一个处理方法。
- 具体处理者(Conreate Handler): 实现处理者接口,负责处理请求,如果自己无法处理,则将请求传递给下一个处理者。
- 客户端(Client):创建责任链并向其发送请求。
ts代码
// 定义处理者接口
interface Handler {
setNext(handler: Handler): Handler
handleRequest(amount: number): void
}
// 具体处理者 - CEO
class CEO implements Handler {
private nextHandler: Handler | null
constructor() {
this.nextHandler = null
}
setNext(handler: Handler): Handler {
this.nextHandler = handler
return handler // 链模式
}
handleRequest(amount: number) {
if (amount > 1000) {
console.log('CEO 批准了该购买请求');
} else if (this.nextHandler) {
this.nextHandler.handleRequest(amount)
} else {
console.log('无人处理该购买请求');
}
}
}
// 具体处理者 - VP
class VP implements Handler {
private nextHandler: Handler | null
constructor() {
this.nextHandler = null
}
setNext(handler: Handler): Handler {
this.nextHandler = handler
return handler
}
handleRequest(amount: number) {
if (amount > 500 && amount <= 1000) {
console.log('副总裁批准了该购买请求');
} else if (this.nextHandler) {
this.nextHandler.handleRequest(amount)
} else {
console.log('无人处理该购买请求');
}
}
}
// 具体处理者 - Manager
class Manager implements Handler {
private nextHandler: Handler | null
constructor() {
this.nextHandler = null
}
setNext(handler: Handler): Handler {
this.nextHandler = handler
return handler
}
handleRequest(amount: number) {
if (amount <= 500) {
console.log('经理批准了该购买请求');
} else if (this.nextHandler) {
this.nextHandler.handleRequest(amount);
} else {
console.log('无人处理该购买请求');
}
}
}
// 创建责任链并发送请求
const ceo = new CEO();
const vp = new VP();
const manager = new Manager();
manager.setNext(vp).setNext(ceo);
// vp.setNext(ceo);
manager.handleRequest(300);
manager.handleRequest(800);
manager.handleRequest(1200);