第六章 基本框架(Framework)
三 消息事件系统(Message Center)
常见的消息事件系统,无外乎注册,注销和执行三个方法。基本都是大同小异。
这里也是相同的,只是把参数分离成单独一个类。
下面介绍几种常见方式,各有利弊,你可以使用1种或几种混用。
namespace DR.Book.SRPG_Dev.Framework
{
/// <summary>
/// 消息中心。
/// 消息中心的方式比较多,你可以挑选一种或几种。
/// 这里把所有东西都放在了MessageCenter中,
/// </summary>
public static class MessageCenter
{
// TODO 参数,注册,注销
/// <summary>
/// 分发Message的实现
/// </summary>
/// <param name="message"></param>
/// <param name="sender"></param>
/// <param name="args"></param>
/// <param name="messageParams"></param>
private static void ExecuteMessage(string message, object sender, MessageArgs args, params object[] messageParams)
{
if (string.IsNullOrEmpty(message))
{
Debug.LogError("[MessageCenter] Argument named 'message' is null or empty.");
return;
}
if (sender == null)
{
Debug.LogError("[MessageCenter] Argument named 'sender' is null");
return;
}
// TODO 分发并执行消息事件
}
}
}
1 事件参数(MessageArgs.cs)
参数可以使用object[]
类型,这里单独建出来一个类。
这里只是参数,你也可以将事件名称(name)和发送者(sender)等也放入其中。
还是按需来。
using System;
namespace DR.Book.SRPG_Dev.Framework
{
public abstract class MessageArgs : EventArgs, IDisposable
{
public void Dispose()
{
OnDispose();
}
protected virtual void OnDispose()
{
}
}
}
2 监听方式(Delegate)
使用监听的方式,常见的是委托模式。这里也是使用委托。
/// <summary>
/// Delegate Listener
/// </summary>
/// <param name="message"></param>
/// <param name="sender"></param>
/// <param name="messageArgs"></param>
/// <param name="messageParams"></param>
public delegate void MessageListener(string message, object sender, MessageArgs messageArgs, params object[] messageParams);
/// <summary>
/// 注册的Listener.
/// 你也可以不使用List,直接使用MessageListener.
/// 注册的时候用 listener += method.
/// 注销的时候用 listener -= method.
/// </summary>
private static readonly Dictionary<string, List<MessageListener>> s_ListenerDict = new Dictionary<string, List<MessageListener>>();
就像注释中写的一样,你可以使用委托的+=
与-=
,也可以使用List
的Add
与Remove
来控制监听。