观察者模式 与 Unity的事件通知

部分内容摘录自程杰的《大化设计模式》

 

观察者模式

 

观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己

 

事件委托说明

委托就是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数和返回值。

一个委托可以搭载多个方法,所有方法被依次唤起。更重要的是,它所搭载的方法并不需要属于同一个类。

委托对象所搭载的所有方法必须具有相同的原形和形式,也就是拥有相同的参数列表和返回值类型。

 

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;
    }
}

测试结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值