【HSJFramework】Unity事件发送机制IMessageHandler

目录

一.编写接口

二.实现接口

三.定义消息结构

四.消息管理器MessageDispatcher的维护

五.消息类型规则

六.继承MessageHandler监听消息

七.使用 


一.编写接口

编写处理消息的接口类和接口方法,当消息分发后,根据消息类型处理当前消息逻辑

public interface IMessageHandler {
    void HandleMessage(Messages messages);
}

二.实现接口

实现接口方法,初始化当前Handler,把当前handler注册进消息管理器,生命周期结束的时候Detach剔除

public class MessageHandler : MonoBehaviour, IMessageHandler
{
    protected  void Awake()
    {
        MessageDispatcher.Attach(this);
    }
    public virtual void HandleMessage(Messages messages)
    {

    }
    protected  void OnDestroy()
    {
        MessageDispatcher.Detach(this);
    }
}

三.定义消息结构

一般我们会定义一个消息类型MesageType,主要是根据这个消息类型来分发和接收消息。另外一个就是定义消息体object,可以为任何类型的数据,当我们接收到数据后转化为我们需要的类型即可

public class Messages{
    public string Type { get; private set; }
    public object Data { get; private set; }

    public Messages()
    {

    }
    public Messages(string type,object data) {
        this.Type = type;
        this.Data = data;
    }
}

四.消息管理器MessageDispatcher的维护

我们需要定义一个消息处理助手的list来存储所有可以接收消息的助手模块,

还要声明一个注册添加进这个list的函数和剥离剔除的函数

public class MessageDispatcher{
    private static  List<IMessageHandler> messageHandlers = new List<IMessageHandler>();

    /// 注册消息
    public static void Attach(IMessageHandler messageHandler)
    {
        if (messageHandlers.IndexOf(messageHandler) == -1)
        {
            messageHandlers.Add(messageHandler);
        }
    }
    
    /// 消息事件分发
  public static void Dispatch(string type,object data = null)
    {
        Messages msg = new Messages(type, data);
        for (int i = 0; i < messageHandlers.Count; i++)
        {
            messageHandlers[i].HandleMessage(msg);
        }
    }

    /// 移除注册的消息
    public static void Detach(IMessageHandler handler)
    {
        if (messageHandlers != null)
        {
            messageHandlers.Remove(handler);
        }
    }

五.消息类型规则

消息类型的定义规则,尽可能的使名字贴近当前消息目的

  public const string ShowMainView = "Show_Main_View";
    public const string HideMainView = "Hide_Main_View";

    public const string ShowLoginView = "Show_Login_View";
    public const string HideLoginView = "Hide_Login_View";

六.继承MessageHandler监听消息

需要监听消息的对象必须继承MessageHandler,并重写HandleMessage方法

 public override void HandleMessage(IMessages messages)
    {
        base.HandleMessage(messages);
        switch(messages.Type)
        {
            case MessagesType.ShowErrorView:
              
            case MessagesType.HideErrorView:
                
            default:
                break;
        }
    }

七.使用 

MessageDispatcher.Dispatch(MessageTypes.HideErrorView);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幻世界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值