卖花网站模板,山东响应式网站建设,建设和住房保障部 网站,火车头wordpress发布图片设计模式—观察者模式 定义对象间的一种一对多的依赖关系#xff0c;当一个对象的状态发生改变时#xff0c;所有依赖于它的对象都得到通知并被自动更新。 主要解决的问题#xff1a;一个对象状态改变给其他对象通知的问题#xff0c;而且要考虑到易用和低耦合#xff0c;…设计模式—观察者模式 定义对象间的一种一对多的依赖关系当一个对象的状态发生改变时所有依赖于它的对象都得到通知并被自动更新。 主要解决的问题一个对象状态改变给其他对象通知的问题而且要考虑到易用和低耦合保证高度的协作。 何时使用一个对象目标对象的状态发生改变所有的依赖对象观察者对象都将得到通知进行广播通知。 示例Unity中的观察者模式 定义一个可观察类Subject 首先我们需要定义一个包含事件的类这个类将在某个状态发生变化时通知所有已注册的观察者。
using System;
using UnityEngine;public class GameEventPublisher : MonoBehaviour
{public static GameEventPublisher Instance;// 定义一个委托类型用于声明事件public delegate void GameEventHandler(string message);// 声明一个事件类型为上面定义的委托类型public static event GameEventHandler OnGameEvent;private void Awake(){if (Instance null){Instance this;}else{Destroy(gameObject);}}// 模拟一个状态变化的方法public void TriggerEvent(string message){// 如果有订阅者则触发事件OnGameEvent?.Invoke(message);}
}创建观察者类Observer 接下来我们创建一个或多个观察者类这些类将监听并响应由GameEventPublisher发布的事件。
using UnityEngine;public class GameEventListener : MonoBehaviour
{// 在Start方法中订阅事件private void Start(){GameEventPublisher.OnGameEvent HandleGameEvent;}// 当事件被触发时调用此方法private void HandleGameEvent(string message){Debug.Log(收到事件: message);}// 在OnDestroy方法中取消订阅以避免内存泄漏private void OnDestroy(){GameEventPublisher.OnGameEvent - HandleGameEvent;}
}触发事件 为了测试这个模式你可以在你的游戏逻辑中某处调用TriggerEvent方法例如通过用户输入、定时器或其他游戏事件触发。 if (Input.GetKeyDown(KeyCode.Space))
{gameEventPublisher.TriggerEvent(Space键被按下);
}这样当按下空格键时GameEventPublisher会触发事件所有订阅了OnGameEvent的观察者都会收到通知并执行相应的操作在这个例子中是打印一条消息到控制台。 这种模式使得代码更加模块化和易于维护因为它允许对象之间进行松散耦合的通信。通过使用事件和委托你可以轻松地添加新的观察者而无需修改现有的发布者代码。