最近有新项目需要和同事合作开发,他做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);
}
}

  

最新文章

  1. HTML DOM Element
  2. android接收短信——framework处理流程(android 5.1)
  3. [译] 企业级 OpenStack 的六大需求(第 2 部分):开放架构和混合云兼容
  4. boa移植
  5. 【枚举】bzoj3391 [Usaco2004 Dec]Tree Cutting网络破坏
  6. CAS 实现单点登录 .NET MVC
  7. 史上最浅显易懂的Git分布式版本控制系统教程
  8. SGU 106 The equation
  9. SDC(7) -- 关于使能信号的时序放松
  10. 安装MySQL和HandlerSocket
  11. 【ThinkingInC++】64、重载new和delete,来模仿内存的分配
  12. Dynamics CRM 客户端的插件调试
  13. [Swift]LeetCode518. 零钱兑换 II | Coin Change 2
  14. Android Studio Termanal打不开,提示java.io.IOEXception:couldn&#39;t create PTY
  15. 【python3 自动化之mysql操作】python3下的mysql入门基础
  16. 介质共享型局域网中的介质访问控制(MAC)协议需要具体解决的3个问题,CSMA/CD介质访问控制的基本思想
  17. .NET项目引用黄色小三角以及找不到依赖的解决方法
  18. windows下配置redis
  19. avalon学习教程
  20. mysqldump导出多个数据库

热门文章

  1. Openssh升级到9.2版本
  2. 数位dp( tzoj6061:Bomb-求49个数;tzoj1427: 不要62)
  3. python脚本打包
  4. idea中怎么查找替换数据?
  5. mysql 优化表空间报错Creating index &#39;PRIMARY&#39; required more than &#39;innodb_online_alter_log_max_size&#39; bytes of modification log. Please try again
  6. 【java数据结构与算法】插入排序
  7. Influxdb客户端使用
  8. vi中将小写转换成大写字母
  9. Scala集合总结
  10. Java Swing 防止键入手Key 的实现方法