首页 > 其他分享 >订阅发布者模式-消息中心

订阅发布者模式-消息中心

时间:2022-11-17 23:01:32浏览次数:47  
标签:ding 订阅 xi de messages xiao 模式 发布者 public

单例模板

public abstract class Singleton<T> where T : new() {
    private static T instance;
    public static T Instance {
        get {
            if (instance == null)
                instance = new T();
            return instance;
        }
        set => instance = value;
    }
}

消息中心

using System;
using System.Collections.Generic;
using UnityEngine;

// 消息中心
public class MessageCenter : Singleton<MessageCenter> {
    // 存储消息
    private Dictionary<string, Dictionary<GameObject, Action>> messages = new Dictionary<string, Dictionary<GameObject, Action>>();

    // 订阅消息
    public void Ding_Yue_Xiao_Xi(string ding_yue_de_xiao_xi, GameObject shei, Action zuo_de_shi) {
        if (!messages.ContainsKey(ding_yue_de_xiao_xi)) {
            messages.Add(ding_yue_de_xiao_xi, new Dictionary<GameObject, Action>());
        }

        Dictionary<GameObject, Action> tempDic = messages[ding_yue_de_xiao_xi];

        if (!tempDic.ContainsKey(shei))
            tempDic.Add(shei, zuo_de_shi);
        else
            tempDic[shei] = zuo_de_shi;
    }

    public void Fa_Bu_Xiao_Xi(string zhi_ding_xiao_xi) {
        if (messages.ContainsKey(zhi_ding_xiao_xi)) {
            foreach (var item in messages[zhi_ding_xiao_xi]) {
                item.Value();
            }
        }
    }
}

老板

using UnityEngine;

// 老板
public class Boss : MonoBehaviour {

    void Start() {
        MessageCenter.Instance.Ding_Yue_Xiao_Xi("发布任务", gameObject, () => { Debug.Log("我是老板,我要发布任务"); });
    }

    [ContextMenu("测试执行")]
    public void Test() {
        MessageCenter.Instance.Fa_Bu_Xiao_Xi("发布任务");
    }
}

员工大鸟

using UnityEngine;

// 员工大鸟
public class BigBird : MonoBehaviour {
    void Start() {
        MessageCenter.Instance.Ding_Yue_Xiao_Xi("发布任务", gameObject, () => { Debug.Log("我是员工,我接收到了消息"); });
    }
}

消息中心是在观察者模式下进一步的细化,将彼此之间的代码彻底的拆分
通过中间的消息中心使得订阅者和发布者之间没有一定的联系。

标签:ding,订阅,xi,de,messages,xiao,模式,发布者,public
From: https://www.cnblogs.com/wuzhongke/p/16901354.html

相关文章

  • 软件设计模式白话文系列(十三)模版方法模式
    1、模式描述模版方法模式属于类行为型模式,在父类中定义业务框架,并将某些步骤的实现延迟到子类实现,允许子类在不影响框架接口的的情况下,重写某些步骤。2、模式结构模版......
  • 03.从架构层面看设计模式(1)
                                工厂模式底层就是if判断然后创建不同的产品           ......
  • LVS负载均衡群集----DR模式
    一、LVS-DR数据流向分析  (1)客户端发送请求到DirectorServer(负载均衡器),请求的数据报文(源IP是CIP,目标IP是VIP)到达内核空间。(2)Directorserver和RealServer......
  • LVS负载均衡群集-DR模式
    LVS-DR工作原理LVS-DR数据包流向分析(1)客户端发送请求到DirectorServer(负载均衡器),请求的数据报文(源IP是CIP,目标IP是VIP)到达内核空间。(2)DirectorServer和RealSer......
  • LVS负载均衡群集-NAT模式
    群集群集含义Cluster,集群、群集由多台主机构成,但对外只表现为一一个整体,只提供一-个访问入口(域名或IP地址),相当于一台大型计算机。为什么使用群集互联网应用中,随着......
  • [笔记]前端路由的两种模式
    参考资料:https://juejin.cn/post/7127143415879303204#heading-11https://blog.csdn.net/qq_28641023/article/details/120328826理解单页面应用单页面应用是指我......
  • Kubernetes日志采集Sidecar模式介绍
    摘要:DaemonSet和Sidecar模式各有优缺点,目前没有哪种方式可以适用于所有场景。因此我们阿里云日志服务同时支持了DaemonSet以及Sidecar两种方式,并对每种方式进行了一些额外......
  • LVS负载均衡集群--DR模式
    一、LVS-DR集群介绍LVS-DR(LinuxVirtualServerDirectorServer)工作模式,是生产环境中最常用的一种工作模式。1、LVS-DR工作原理LVS-DR模式,DirectorServer作为群......
  • LVS负载均衡群集----NAT模式
    一、集群1.1、群集的含义Cluster,集群,群集由多台主机构成,但对外只表现为一个整体,只提供一个访问入口(域名或IP地址),相当于一台大型计算机。1.2、群集的类型负载均衡群......
  • MySQL+MGR单主模式集群环境部署
    MySQLGroupReplication(简称MGR)是MySQL官方于2016年12月推出的一个全新的高可用与高扩展的解决方案。MGR是MySQL官方在5.7.17版本引进的一个数据库高可用与高扩展的解决方......