先借助一个经典案例理解观察者模式
在程序开发过程中,我们经常需要使用一个类来触发事件,同时有很多类要监听触发信息,就像猫和老鼠一样,我们在猫身上挂了一个铃铛,当猫出现了,铃铛就会响起,老鼠们接受到了铃铛响起的事件,就会触发逃跑方法。老鼠有很多个,它们就是观察者。猫只有一只,它属于被观察者。
观察者模式: 定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己。
下面我们就详细介绍一下观察者模式的使用方法
观察者模式代码
被观察者猫的代码:
//猫
public class Cat:MonoBehaviour
{
//声明一个关于猫的委托
public delegate void WhatIsTheCatDoing();
//再定义一个猫出门的事件
public event WhatIsTheCatDoing theCatOut;
private void Update()
{
if(Input.GetKeyDown(KeyCode.R))
{
CatOut();
}
}
public void CatOut()
{
Debug.Log("猫出门了,老鼠快跑");
//调用猫出门的事件
theCatOut();
}
}
观察者们老鼠的代码
public class Mouse:MonoBehaviour
{
public Cat cat;
private void Start()
{
//给猫出门添加老鼠逃跑事件
cat.theCatOut+=MouseRun;
}
private void OnDestory()
{
cat.theCatOut-=MouseRun;
}
private void MouseRun()
{
Debug.Log("老鼠逃跑了");
}
}
运行结果
我一个生成了12只老鼠,他们在猫出门事件触发后,都接收到了消息,然后触发了逃跑事件。