最近有新项目需要和同事合作开发,他做UI 我做网络层,做着做着发现

如果我们要相对独立完成自己的开发任务,那我们的代码耦合得减少,不然

一个人代码有大改的时候,另一个人也要进行大幅修改,这样不便于后期开发维护。

然后做了一个简单的消息机制。

  总的来说是用了一个委托的方式解决的

  这是消息管理, 负责添加\删除 监听者,和分发消息的

using System.Collections.Generic;

public class MsgHandler
{ public delegate void DelMsgHandler(Msg msg); private static Dictionary<string, DelMsgHandler> mDicMsgs = new Dictionary<string, DelMsgHandler>(); /// <summary>
/// 添加监听者
/// </summary>
/// <param name="msgType"></param>
/// <param name="handler"></param>
public static void AddListener(string msgType, DelMsgHandler handler)
{
//判空
if (mDicMsgs == null) mDicMsgs = new Dictionary<string, DelMsgHandler>();
if (!mDicMsgs.ContainsKey(msgType)) mDicMsgs.Add(msgType, null);
//增加监听
mDicMsgs[msgType] += handler; }
/// <summary>
/// 去除对参数handler的监听
/// </summary>
/// <param name="msgType">消息类型</param>
/// <param name="handler">被监听方法</param>
public static void RemoveListener(string msgType, DelMsgHandler handler)
{
if (mDicMsgs != null && mDicMsgs.ContainsKey(msgType)) mDicMsgs[msgType] -= handler;
} /// <summary>
/// 清除所有的监听者
/// </summary>
public static void ClearAllListeners()
{
if (mDicMsgs != null) mDicMsgs.Clear();
} /// <summary>
/// 分发消息
/// </summary>
/// <param name="msgType">消息类型</param>
/// <param name="msg">分发的内容</param>
public static void SendMsg(string msgType, Msg msg)
{
DelMsgHandler handler; if (mDicMsgs != null && mDicMsgs.TryGetValue(msgType, out handler))
{ if (handler != null)
handler(msg);
}
} /// <summary>
/// 群发消息
/// </summary>
/// <param name="msg">消息内容</param>
public static void AllSendMsg(Msg msg)
{
foreach (var item in mDicMsgs)
{
item.Value(msg);
}
}
} public class Msg
{
public string Key { get; private set; }
public object Value { get; private set; }
public Msg(string key, object value)
{
this.Key = key;
this.Value = value;
}
}

  这是监听类, 负责监听

  

public class MsgReceive : MonoBehaviour
{ private void Awake()
{
MsgHandler.AddListener("MsgReceive", HandleMsg); } private void HandleMsg(Msg msg)
{ } private void OnDestroy()
{
MsgHandler.RemoveListener("MsgReceive", HandleMsg);
}
}

  

Unity 消息机制的更多相关文章

  1. Unity 消息发送机制 解析

    该博客,只为解析,解析,解析,已经整理好,已经整理好,已经整理好.代码核心原理套用网上最流行的那一套,也是最常用游戏开发适用的消息机制.这里面加上自己的一些优化,极大的修正(哈哈),实测,没问题.万一 ...

  2. Unity 游戏框架搭建 (五) 简易消息机制

    什么是消息机制? 23333333,让我先笑一会. 为什么用消息机制?   三个字,解!!!!耦!!!!合!!!!. 我的框架中的消息机制用例: 1.接收者 ``` using UnityEngine ...

  3. Unity 游戏框架搭建 2019 (四十六) 简易消息机制 & 集成到 MonoBehaviourSimplify 里

    在上一篇,我们接触了单例,使用单例解决了我们脚本之间访问的问题. 脚本之间访问其实有更好的方式. 我们先分下脚本访问脚本的几种形式. 第一种,A GameObject 是 B GameObject 的 ...

  4. Unity 游戏框架搭建 2019 (五十、五十一) 消息机制小结&MonoBehaviourSimplify 是框架?

    我们花了 5 篇文章学习了消息机制的方方面面.并且完成了一个简易消息机制,之后集成到了我们的 MonoBehaviourSimplify 里. 现在 MonoBehaviourSimplify 有一点 ...

  5. Unity消息简易框架 Advanced C# messenger

    Unity消息简易框架 Advanced C# messenger Unity C# 消息机制  [转载 雨凇MOMO博客] https://www.xuanyusong.com/archives/2 ...

  6. iOS开发系列--通知与消息机制

    概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情.iOS中通知机制又叫消息机制,其包括两类:一类是本地 ...

  7. Android消息传递之Handler消息机制

    前言: 无论是现在所做的项目还是以前的项目中,都会遇见线程之间通信.组件之间通信,目前统一采用EventBus来做处理,在总结学习EventBus之前,觉得还是需要学习总结一下最初的实现方式,也算是不 ...

  8. Windows消息机制

    Windows的消息系统是由3个部分组成的: · 消息队列.Windows能够为所有的应用程序维护一个消息队列.应用程序必须从消息队列中获取消息,然后分派给某个窗口.· 消息循环.通过这个循环机制应用 ...

  9. OSG消息机制之事件处理概述

    OSG的消息机制包括好多个头文件预定义及多个类. 首先,消息接收相关的类当属osgGA::GUIEventHandler和osgGA::GUIEventAdapter这两个类了.前者处理OSG程序与用 ...

  10. [转]runtime 消息机制

    原文地址:http://www.jianshu.com/p/f6300eb3ec3d 一.关于runtime 之前在项目中有遇到过用runtime解决改变全局字体的问题,所以再一次感受到了runtim ...

随机推荐

  1. leecode76. 最小覆盖子串

    76. 最小覆盖子串 给你一个字符串 s .一个字符串 t .返回 s 中涵盖 t 所有字符的最小子串.如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" . 注意: ...

  2. 激光雷达ldlidar communication is abnormal.

    查看串口设置是否正常,可以通过cat /dev/ttyS4查看是否有数据以确定所接的串口是否正确

  3. SpringBoot打成war包,部署到Tomcat服务器

    SpringBoot默认达成jar包,使用SpringBoot构想web应用,默认使用内置的Tomcat.但考虑到项目需要集群部署或者进行优化时,就需要打成war包部署到外部的Tomcat服务器中.  ...

  4. jupyter notebook 切换环境

    jupyter-notebook 中切换 conda 虚拟环境 介绍 ​ jupyter notebook是anaconda中root目录中默认的python环境,如果要使拥创建的其他环境,则需要安装 ...

  5. C盘爆红满了怎么办?既然C盘装不下了,那咱给C盘扩容不就完事了吗!

    我们在使用电脑的过程中,经常容易出现C盘爆红,反而其他盘还有大量可用空间的情况. 为什么会这样呢?其实主要就两种原因: 一是电脑使用习惯不好,不管什么软件都默认安装在C盘,大文件又喜欢放在桌面,久而久 ...

  6. 解决python 操作 hbase报错:TTransportException(type=4,message=’TSocket read 0 bytes’)

    ```text# 解决报错:hbase报错TTransportException(type=4,message='TSocket read 0 bytes')这种情况一般协议问题和服务端没开启,如果服 ...

  7. iOS基础 - SceneDelegate

    前言 1 - 自从 Xcode11 发布以来,当你使用新 XCode 创建一个新的 iOS 项目时 SceneDelegate 会被默认创建 2 - 在 iOS 13 后 SceneDelegate ...

  8. OSPF的安全认证

    OSPF的安全认证 OSPF通过LSA报文同步状态信息,协议根据LSA提供的状态信息,快速实行全网路由的建立.也就是一通百通,一变则变.坏处就是有人搞破坏,一坏则百坏.为防止网络破坏活动,实行认证(明 ...

  9. wpf dataGrid 获取单元格,并对单元格中的对象操作

    先上图: 要求:对第一行的"选项内容举例..."的控件进行隐藏,如下: 前端代码: <Window x:Class="DataGridPractice.MainWi ...

  10. BIP弹框内容显示的隐藏

    viewModel.on("customInit", function (data) {         // 关闭或取消关原因详情--页面初始化         viewMode ...