【设计模式与游戏完美开发 】观察者模式

事件系统就是典型的观察者模式,不过C#有委托会相对简单一点,而如果没有委托,每一个事件都会要求生成一个类对象来进行保存事件响应方法。

EventSystem 事件系统 ,Dictionary<EventName, List<Action<int>> > eventDict; 

内有void AddListener(EventName, Action<int>)方法 ,RemoveListener(EventName, Action<int>)方法,Execute(EventName)方法

分别是添加监听事件,移除监听事件,执行事件

Action是一个C#自带委托类型,委托类似函数指针 或可以理解为函数变量,C#是可以存储类方法的。

例如:在某个UI上有一个Text文本显示一个成绩,当这个成绩数据发生变动时要刷新这个文本。

此时可以用事件系统来为此添加一个监听事件,如事件名为EventName.ScoreChange

在这个UI的脚本(类)下,写一个方法来根据传入的Score参数(int)进行更新Text

void ChangeText(int Score){  //根据Score更新Text }

此时,方法是准备好了,但是要将这个方法传入到事件系统中,进行等待调用。

EventSystem.Instance.AddListener(EventName.ScoreChange, ChangeText);

当分数改变时,调用EventSystem.Instance.Execute(EventName.ScoreChange)执行所有ScoreChange事件相关的方法

eventDict[EventName.ScoreChange].Execute(score); 要将分数传入

然后在UI脚本类放入的监听方法ChangeText就会调用进行更新Text!

AddListener(EventName, Action<int> action) 逻辑如下:

eventDict[EventName].Add(action); //注意一定要保证这个List<Action<int>>存在!

结合上述事件系统例子总结:

  事件系统中的eventDict中每一个用EventName代表的List<Action<int>>就是所谓的“观察者”,而事件系统就是观察者集合。

上述的EventName.ScoreChange观察者 是观察Score数据变化,当这个数据变化时就会调用 “观察者”下的所有监听方法Action<int>委托(如:ChangeText(int score))。

注意:观察者就是一堆方法(委托),是它们在“观察”事件,当事件发生后就会触发;可仔细看红色代码就是方法开始观察事件的处理【即注入事件发生后的方法】,而蓝色代码就是事件发生逻辑,开始触发观察者逻辑【即执行所注入的方法】

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值