using System.Collections; using System.Collections.Generic; using UnityEngine;
namespace UIFrame { /// /// 消息(传递)中心 /// 负责UI框架中,所有UI窗体间的数据传值 /// public class MessageCenter { // 定义一个委托. 观察者模式 public delegate void DelegateMessageDelivery(KeyValueUpdate kv);
// 声明委托实例. 消息中心缓存集合: // string: 监听的类型( 数据大的分类), // DelegateMessageDelivery: 监听到以后要执行的委托 public static Dictionary _dicMessages = new Dictionary();
/// /// 增加委托指向的方法:监听消息 /// /// 消息分类 /// 消息委托 public static void AddMsgListener(string messageType, DelegateMessageDelivery handler) { if (!_dicMessages.ContainsKey(messageType)) { _dicMessages.Add(messageType, null); } _dicMessages[messageType] += handler; }
/// /// 委托指向的方法:取消消息的监听 /// /// /// public static void RemoveMsgListener(string messageType, DelegateMessageDelivery handler) { if (_dicMessages.ContainsKey(messageType)) { _dicMessages[messageType] -= handler; } }
/// /// 委托指向的方法:取消所有消息的监听 /// public static void RemoverAllMsgListener() { if (_dicMessages != null) { _dicMessages.Clear(); } }
/// /// 调用(执行)委托 (发送消息) /// /// 消息的分类 /// 键值对(对象) public static void SendMessage(string messageType, KeyValueUpdate kv) { DelegateMessageDelivery del; // 实例化一个委托 if (_dicMessages.TryGetValue(messageType, out del)) { if (del != null) { // 调用执行委托 del(kv); } } }
}
/// /// 键值对更新类 /// 功能:配合委托,实现委托数据传递 /// public class KeyValueUpdate { private string _Key; private object _Values; public string Key { get { return _Key; } } public object Values { get { return _Values; } }
// 构造函数初始化字段 public KeyValueUpdate(string key, object valueObj) { _Key = key; _Values = valueObj; } }
}
/// 键值对更新类 /// 功能:配合委托,实现委托数据传递
窗体基类封装消息系统方法
private void Awake() {
if(MsgTypeName != "") { ReceiveMessage(MsgTypeName, ReceiveMsg); //委托方法 Debug.Log("注册接收消息,消息类型“); } }
如何使用:
SendMessage("TimerScriber", "StartCountTimer");
”TimerScriber"是参数 messageType 即消息类型,
“StartCountTimer” 是参数 msgName 即消息名称,
第三个参数消息内容 msgContent 这里为空Null。
protected override void Initialization() { MsgTypeName = NAME; }
参考:
饿了要吃,累了要睡 https://blog.csdn.net/wait_for_eva/article/details/106857839
消息系统设计 https://blog.csdn.net/yye4520/article/details/80465251