个人主页:@元宇宙-秩沅
hallo 欢迎 点赞 收藏⭐ 留言 加关注✅!
本文由 秩沅 原创
收录于专栏:Unity基础实战
观察者设计模式就好比你订阅了一份报纸。在这个场景中,你是观察者,而报纸是主题。
1.主题(Subject):主题就是这份报纸。每次有新的新闻时,报纸都会发给所有订阅者。
2.观察者(Observer):观察者就是那些订阅了这份报纸的人。他们想要了解最新的新闻,所以他们订阅了报纸。
3.通知:当主题(报纸)有新的新闻时,它会通知所有订阅者(观察者),这就好像报社把新报纸送到每位订户的家里。
这个模式的好处是,订户(观察者)不需要每天去报社(主题)询问是否有新的新闻。主题(报纸)会主动通知他们。这样,你只需等待通知,而不需要反复检查,这是一种更高效的方式来获取信息。
总结一下,观察者模式让一个对象(主题)可以告诉其他多个对象(观察者)自己发生了什么变化,而观察者则会根据这个信息采取相应的行动。这就像报纸告诉订户有新的新闻一样,非常方便和高效。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
public class EventCenter : SingleManager<EventCenter>
{
private Dictionary<string, UnityAction <Object> > eventDic = new Dictionary<string, UnityAction<Object>>();
// 添加事件监听
public void AddEventListener<T>(string name, UnityAction<Object> action)
{
if (eventDic.ContainsKey(name ))
{
eventDic[name] += action;
}
}
// 移除对应的事件
public void RemoveEventListener<T>(string name, UnityAction<Object> action)
{
if (eventDic.ContainsKey(name))
{
eventDic[name] -= action;
}
}
// 事件触发
public void EventTrigger<T>(string name, Object info)
{
if (eventDic.ContainsKey(name))
{
if(eventDic[name] != null)
eventDic[name].Invoke(info);
}
}
//清空事件中心
public void Clear()
{
eventDic.Clear();
}
}
缺点:
UnityAction中的Object存在拆箱操作
并且只能传递有参的事件进来
⭐【Unityc#专题篇】之c#进阶篇】
⭐【Unityc#专题篇】之c#核心篇】
⭐【Unityc#专题篇】之c#基础篇】
⭐【Unity-c#专题篇】之c#入门篇】
⭐【Unityc#专题篇】—进阶章题单实践练习
⭐【Unityc#专题篇】—基础章题单实践练习
⭐【Unityc#专题篇】—核心章题单实践练习
你们的点赞 收藏⭐ 留言 关注✅是我持续创作,输出优质内容的最大动力!、