unity观察者模式+委托

编程入门 行业动态 更新时间:2024-10-17 11:21:39

unity<a href=https://www.elefans.com/category/jswz/34/1765125.html style=观察者模式+委托"/>

unity观察者模式+委托

“组件协作”模式:

现代软件专业分工之后的第一个结果是“框架与应用程序的划分”,“组件协作”模式通过晚期绑定,来实现框架与应用程序之间的松耦合,是二者之间协作时常用的模式。

-典型模式

①模板方法Template Method

②策略模式Strategy

③观察者模式Observer / Event

观察者模式

-动机

在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系”—一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化。

使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。

-模式定义

定义对象间的一种一对多(变化)的依赖关系,以便当一个对象(Subject)的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。

-结构/类图

-要点总结

使用面向对象的抽象,Observer模式使得我们可以独立地改变目标与观察者,从而使二者之间的依赖关系达致松耦合。

目标发送通知时,无需指定观察者,通知(可以携带通知信息作为参数)会自动传播。

观察者自己决定是否需要订阅通知,目标对象对此一无所知

Observer模式是基于事件的UI框架中非常常用的设计模式,也是MVC模式的一个重要组成部分。

委托delegate

委托具有以下属性:

  • 委托类似于 C++ 函数指针,但委托完全面向对象,不像 C++ 指针会记住函数,委托会同时封装对象实例和方法。
  • 委托允许将方法作为参数进行传递。
  • 委托可用于定义回调方法。
  • 委托可以链接在一起;例如,可以对一个事件调用多个方法。

通过以上理论, 实现广播监听功能,共分为三个脚本

①EventCenter.cs

②CallBack.cs, 加入委托和单纯的观察者模式不一样的是

前者使用委托, 用一个类去代替观察者干活

后者使用虚函数, 观察者覆写同一个父类的纯虚函数, 父类用指针容器装载观察者, 再通过指针调用纯虚函数, 纯虚函数根据具体对象(观察者)调用实际对象的函数

③EventDefine.cs

写好以上三个脚本后, 无需挂载在unity的物体对象上, 即可使用

实际使用方法如下:

以第一个ShowGamePanel为例子

①首先在EventDefine脚本中添加事件ID: ShowGamePanel

②观察者订阅该事件ID, 委托者为Show()函数

③被观察者广播通知订阅了该事件的观察者(有需求的话可以多个地方进行广播)

④自动调用被委托者callBack, callBack实际要干的事是Show(), 简单来说就是调用Show()函数, 这里如果不懂请看EventCenter脚本第150~167行

至此目的达成

unity开发中使用:

比如UI上有一个下拉的List,我点击了其中的一项按钮,都会导致UI界面的变化,比如我点击“排行榜”,对应出现含有“第一第二第三”的界面;我选择“成就”,就会出现含有“五杀等成就”的界面。

简而言之:用于UI界面的显隐控制

当然,模式不是从一开始就能写出来,除非你是大佬;模式是在开发迭代的过程中慢慢成熟。

如果你看了我粗糙的文章, 还是不懂观察者模式, 那我只能show his the code: C++ 观察者模式讲解和代码示例

更多推荐

unity观察者模式+委托

本文发布于:2024-02-05 10:21:08,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1744768.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:观察者   模式   unity

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!