部分内容摘录自程杰的《大化设计模式》
观察者模式
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己
事件委托说明
委托就是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数和返回值。
一个委托可以搭载多个方法,所有方法被依次唤起。更重要的是,它所搭载的方法并不需要属于同一个类。
委托对象所搭载的所有方法必须具有相同的原形和形式,也就是拥有相同的参数列表和返回值类型。
Unity的事件通知
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
// 事件管理类
public class EventManager : MonoBehaviour {
public delegate void EventDelegate(); // 定义委托类型
public static EventDelegate EventUpdateCoin; // 更新Coin事件的委托代理
void Start () {
Button btn = transform.Find("Button").GetComponent<Button>();
btn.onClick.AddListener(OnBtnClick);
}
private void OnBtnClick()
{
Debug.Log("点击按钮");
EventUpdateCoin(); // 依次调用EventUpdateCoin搭载的方法
}
}
// 界面1
public class UIPanel1 : MonoBehaviour
{
void Start () {
EventManager.EventUpdateCoin += UpdateCoin1; // 搭载UpdateCoin1方法
}
public void UpdateCoin1()
{
Debug.Log("UpdateCoin1");
}
void OnDestroy()
{
EventManager.EventUpdateCoin -= UpdateCoin1; // 卸载UpdateCoin1方法
}
}
// 界面2
public class UIPanel2 : MonoBehaviour
{
void Start () {
EventManager.EventUpdateCoin += UpdateCoin2;
}
public void UpdateCoin2()
{
Debug.Log("UpdateCoin2");
}
void OnDestroy()
{
EventManager.EventUpdateCoin -= UpdateCoin2;
}
}
测试结果: