1. 概念
将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。
2. 为什么使用
- 解耦请求发送者和接收者,使多个对象都有可能接收请求,而发送者不需要知道哪个对象会处理它。
3. 代码实现
例子:在游戏开发中,我们经常会遇到事件系统中,一个事件对应多个界面的刷新
interface EventHandle {
doHandle(event: string, ...args: any[]): void
}
class EventHandleImpl implements EventHandle {
public doHandle(event: string, ...args: any[]): void {
console.log(event, ...args);
}
}
class EventHandleImpl2 implements EventHandle {
public doHandle(event: string, ...args: any[]): void {
console.log(event, ...args);
}
}
class EventHandlerChain {
private _list: EventHandle[] = [];
public addHandle(handle: EventHandle): void {
this._list.push(handle);
}
public doHandle(event: string, ...args: any[]): void {
for (let i = 0; i < this._list.length; i++) {
this._list[i].doHandle(event, ...args);
}
}
}
let chain = new EventHandlerChain();
chain.addHandle(new EventHandleImpl());
chain.doHandle("test", 1, 2, 3, 4, 5);
chain.addHandle(new EventHandleImpl2());
chain.doHandle("test", 1, 2, 3, 4, 5, 6);