设计模式学习篇-职责链模式

42 阅读1分钟

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);