观察者模式(一对多)

是一个一对多的关系。

是看到b站一个视频up讲解的设计模式很好,所以记录一些这种方式。

视频链接:

https://www.bilibili.com/video/BV1nC411G7Qs/?spm_id_from=333.788.top_right_bar_window_history.content.click&vd_source=1d308e51d36762a2c170e7f42ab0f628icon-default.png?t=N7T8https://www.bilibili.com/video/BV1nC411G7Qs/?spm_id_from=333.788.top_right_bar_window_history.content.click&vd_source=1d308e51d36762a2c170e7f42ab0f628

观察者模式讲解:

表面上:

实际上:

表面上是,观察者主动的观察大哥的状态有没有改变

实际上是,大哥主动的发消息给小弟,告诉自己的状态改变。

观察者模式结构:

大哥类

大哥类

状态的属性/字段

观察者的小弟列表

大哥修改状态的方法(状态参数)

        修改自己状态state

增加小弟方法

    修改小弟列表

减少小弟方法

     修改小弟列表

大哥广播的方法:

遍历自己体内所有小弟,告诉他们我的状态改变了。

小弟类

小弟类

    小弟自己的状态属性

   接受信息的方法(大哥的信息参数)

{

        小弟自己的状态属性 ;// 大哥信息参数提取出来(更改自己的状态)

}

其他逻辑    小弟检查到自身状态改变,触发其他不同方法逻辑。做出不同的反应。

小弟发出hello的方法()

{

        检查到小弟状态改变,发出hello。

}

案例:

土地  uimanager

使用观察者模式,制作植物的状态。

按下p键,显示ui的按钮,土地是空的状态

 土地  状态

种子

成长

成熟

bug问题:

声明没有赋值的变量报错。

空指针异常1。

使用transform。find()查找子对象,但是子对象是不可见的。所以查找不到?????

在Unity中,Transform.Find 方法用于在子对象层级中查找具有特定名称的Transform组件。这个方法并不考虑对象是否“隐藏”或可见,它只关心对象名称和它们在场景中的层级关系。

"隐藏"的Unity对象通常指的是以下几种情况:

  1. 禁用状态:如果对象的GameObject.activeSelf属性为false,则对象在场景中不会渲染或参与物理模拟等。但是,即使对象被禁用,它的Transform仍然存在,因此Transform.Find仍然可以找到它。

  2. 渲染设置:对象可能在渲染层面被“隐藏”,比如其材质是透明的,或者它不在当前相机的视野内。这些渲染层面的设置不会影响Transform.Find的查找结果。

  3. UI元素:对于Unity的UI系统,如果一个UI元素被设置为不可见(比如其Visible属性为false),这同样不会影响它在Transform.Find中的可查找性。

因此,Transform.Find方法可以查找到场景层级中任何具有特定名称的子对象,不论这些对象是否处于“隐藏”状态。如果你无法通过Transform.Find找到某个对象,那么最可能的原因是:

  • 对象名称不正确或大小写不匹配(Unity的Transform名称是区分大小写的)。
  • 对象不是你调用Transform.Find的Transform的直接或间接子对象。
  • 对象可能已被删除或未正确添加到场景中。

请检查这些可能的原因,确保你正确地使用Transform.Find方法。如果你确实想要基于对象的可见性或其他属性来查找对象,你可能需要编写自定义的逻辑来遍历子对象并应用这些条件。

空指针2

发布订阅模式和观察者模式区别:

观察者模式:

        大哥管理小弟,知道小弟存在

发布订阅模式:

        不知道对方的存在

发布订阅模式和观察者模式之间的主要区别在于它们之间的耦合度、通信方式以及事件调度的方式。以下是相关介绍:

  • 耦合度。观察者模式通常具有较高的耦合度,因为观察者(Observer)和目标(Subject)之间是直接联系的,观察者依赖于目标的存在;发布订阅模式提供了更松散的耦合,其中发布者(Publisher)和订阅者(Subscriber)不需要直接交互,而是通过一个调度中心(如事件通道)进行通信。
  • 通信方式。在观察者模式中,目标的变化直接通知给所有注册的观察者,这种通信方式是同步的;发布订阅模式通常使用消息队列,允许事件以异步的方式被订阅者处理
  • 事件调度的方式。发布订阅模式有一个事件调度中心,负责管理事件的发布和订阅,这样可以使订阅者与发布者之间的依赖关系被隔离,简化开发过程;观察者模式中,目标(Subject)需要维护对所有观察者的引用,并在状态变化时通知它们。

总结来说,发布订阅模式提供了一种更加灵活、解耦的方式来处理对象之间的依赖关系,特别是在需要处理大量事件或不同类型事件的场景中更为适用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值