观察者的理解:“处理一个信息对应多个事件发生的情况使用更少的代码更加易于维护”
如果在一个项目中有大量重复的代码,修改起来就会很难,一不小心删除一个可能会出现报错的情况,最严重的可能整个项目都会寄。(这就是高耦合度的问题,但是目前在做原型开发的时候藕度高的情况还是存在,想着后面重构的时候尽量把藕度降低,把所有模块分开)

如何理解观察者模式呢,举一个生活中的例子,比如本人一听到别人叫我去吃饭,那我就立马放下手上的工作跟着他去吃饭,而他是给我发消息的,我收到他的消息,我就知道他现在当前状态就是想去吃饭,那我就是观察者,他就是被观察者

实现手段
CharSui为被观察者
Martin为观察者

首先创建一个监听者基类用于观察者身上

public abstract class Observer:MonoBehaviour
{

public static event Action SendMessage;

public void haveDinner()
{
    SendMessage?.Invoke();
}

}

然后再创建一个目标对象类用于监听他的状态(ChaiSui)

public class ChaiSui : MonoBehaviour
{

public static event Action SendMessage;

void Start()
{
    Invoke("Chifan", 2f);
}

public void Chifan()
{
    Debug.Log("叉烧:Martin我叫你去吃饭了");
    SendMessage?.Invoke();
}

}

用Invoke来进行延时发送,当两秒后将执行Chifan方法 然后再传递给Martin(观察者),Martin继承观察者基类

public class Martin : Observer
{

void OnEnable()
{
    ChaiSui.SendMessage += GetMessage;
}
public void GetMessage()
{
    Debug.Log("Martin:走");
}


void OnDisable()
{
    ChaiSui.SendMessage -= GetMessage;
}

}
然后把他们分别挂靠在某个物体身上,当2秒后将状态发送至Martin,Martin也会执行GetMessage方法

结果如下
请输入图片描述