| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 | 
							- class Listener{
 
-     //关注的消息
 
-     private _event: string = '';
 
-     //消息对应的事件
 
-     private _callback: Function = null;
 
-     //回调函数的this指向
 
-     private _callTarget: any = null;
 
-     constructor(ev: string, callback: Function, target: any = null){
 
-         this._event = ev;
 
-         this._callback = callback;
 
-         this._callTarget = target;
 
-     }
 
-     hasCallBack(func: Function){
 
-         return this._callback === func;
 
-     }
 
-     callback(...args){
 
-         this._callback.apply(this._callTarget,[...args]);
 
-     }
 
- }
 
- class MessageMgr{
 
-     static instance: MessageMgr = null;
 
-     //考虑多个观察者 关注同一个消息的情况
 
-     private _listeners: Map<string, Listener[]> = new Map();
 
-     //注册消息
 
-     addEvent(ev: string, callback: Function, target: any = null){
 
-         const lis: Listener = new Listener(ev, callback, target);
 
-         if(this._listeners.has(ev)){
 
-             //如果消息已经被某个观察者关注了 那么找到那个数组 把新的观察者也存进去
 
-             this._listeners.get(ev).push(lis);
 
-             return;
 
-         }
 
-         //把消息和观察者对应存储
 
-         //先创建一个Listener类型的数组
 
-         const liss: Listener[] = [];
 
-         //把第一个对应ev的观察者存储起来
 
-         liss.push(lis);
 
-         //把消息和存listener的数组 存到map 中
 
-         this._listeners.set(ev, liss);
 
-     }
 
-     //激活消息
 
-     dispatch(event: string, ...args){
 
-         this._listeners.forEach((liss: Listener[], ev: string)=>{
 
-             //遍历整个map 判断传递进来的消息 是否和某个键值对的键 相同
 
-             if(event === ev){
 
-                 for(const lis of liss){
 
-                     lis.callback(...args);
 
-                 }
 
-             }
 
-         })
 
-     }
 
-     //移除事件
 
-     removeEvent(event: string | Function){
 
-         if(typeof(event) === "string"){
 
-             this._listeners.delete(event);
 
-             return;
 
-         }
 
-         for(const liss of Array.from(this._listeners.values())){
 
-             for(let i = 0; i < liss.length; i++){
 
-                 if(liss[i].hasCallBack(event)){
 
-                     liss.splice(i , 1);
 
-                     return;
 
-                 }
 
-             }
 
-         }
 
-     }
 
-     //移除所有事件
 
-     removeAll(){
 
-         this._listeners.clear();
 
-     }
 
- }
 
- export const messageMgr: MessageMgr = MessageMgr.instance = new MessageMgr();
 
 
  |