定义 为请求创建一个接收对象的链 每个对象沿着链传递请求,直到有对象处理它 类比:在公司里请假,申请先由你的直属上司审批,如果他不能处理,再向上一级领导审批,直到申请被批准或到达最高领导 应用场景 需要多个对象处理请求,但不希望指定处理者时 需要在运行时灵活地组合处理者时 优缺点 优点 降低了请求发送者和接收者之间的耦合 增强了请求处理的灵活性 缺点 可能处理延迟,因为请求可能通过链中多个处理者 如果链过长,可能影响性能 实现代码 abstract class Handler { private nextHandler: Handler; public setNext(handler: Handler): Handler { this.nextHandler = handler; return handler; } public handle(request: string): string { if (this.nextHandler) { return this.nextHandler.handle(request); } return null; } } class ConcreteHandler1 extends Handler { public handle(request: string): string { if (request === 'Request1') { return `ConcreteHandler1: I'll handle the ${request}.`; } return super.handle(request); } } class ConcreteHandler2 extends Handler { public handle(request: string): string { if (request === 'Request2') { return `ConcreteHandler2: I'll handle the ${request}.`; } return super.handle(request); } } // 客户端代码 function clientCode(handler: Handler) { const requests = ['Request1', 'Request2', 'Request3']; for (const request of requests) { console.log(`Client: Who wants to handle ${request}?`); const result = handler.handle(request); if (result) { console.log(` ${result}`); } else { console.log(` ${request} was left untouched.`); } } } const handler1 = new ConcreteHandler1(); const handler2 = new ConcreteHandler2(); handler1.setNext(handler2); clientCode(handler1);