using System.Collections.Generic; using System; public class Mediator { private Dictionary<string, Action<object>> dict = new Dictionary<string, Action<object>>(); //注册消息 public void RegistAction(string mes, Action<object> action) { if (CheckAction(mes)) { Action<object> a = GetAction(mes); a += action;//开辟新内存了,引用新的地址 //字典中保存的是以前的引用地址,移除,重新添加 dict.Remove(mes); dict.Add(mes, a); } else { dict.Add(mes, action); } } //发送消息 public void SendMes(string mes,object par) { if (CheckAction(mes)) { Action<object> action; dict.TryGetValue(mes, out action); action(par); } } public Action<object> GetAction(string mes) { Action<object> action; dict.TryGetValue(mes, out action); return action; } public bool CheckAction(string mes) { Action<object> action; dict.TryGetValue(mes, out action); if (action == null) { return false; } return true; } }
public abstract class SubSystem { protected Mediator mMediator; public SubSystem(Mediator mediator) { mMediator = mediator; this.Init(); } public abstract void Init(); }
可以看出,我这里的中介者是用来做信息的沟通者的,提供给子系统添加监听和发送消息的接口。而子系统中引用这个中介者,来和其他系统沟通。(中介者模式使用示例)