通知一个类另一个类的更改

Notifying a class of another class' changes

本文关键字:另一个 一个 通知      更新时间:2023-10-16

具有类ContainerItemProperty,每当项中的属性发生更改时,都应通知容器。

容器是项目的所有者,需要根据其属性正确管理这些项目的信息。

我已经想到了两种选择:

  1. 观察者模式
  2. 代理对象

在我看来,观察者模式对于这项任务来说似乎太重了。代理对象可以很好地工作,但在这种情况下,我会违反DRY原则,因为我必须将调用从代理转发到实际对象。

一个要求是对用户隐藏细节。要求不需要调用某些update_item()函数或类似函数,即将通知容器的责任交给用户,这可能会导致使用问题。

在这种简单的情况下,我看不出使用Observer的原因。由于Item一次只能在一个容器中,我只想给Item一个指向它所在容器的引用或指针

Item的某个Property改变时,它能够通过该指针通知它的Container

Observer模式在需要通知许多对象的情况下非常有用。

编辑

使用接口和极其干净的设计做每一件简单的事情也可能会对你造成伤害。我认为zen of Python的引用很好地解释了我的意思:

Special cases aren't special enough to break the rules. //make Interfaces
Although practicality beats purity. //but not everywhere

所以你应该在纯度和实用性之间取得平衡

您应该使用最容易理解和维护的模式,并且最少需要专门组件的发明。在我工作的环境(objective-C)中,观察者模式是最简单的。当您的通知要求发生变化时,它还提供了灵活性。

Andrew的答案是事件更简单——对象之间的直接通信不需要发明代理或通知处理的开销。但是,如果您将来需要它,它的灵活性会降低。

我不知道"太重"是什么意思。也许你可以解释一下。

正如前面所提到的,Observer在这里的功能相当夸张,但解决方案非常简单。你只需要把这件事搞得一团糟。

  • 当属性发生更改时,它会通知其父项
  • 当一个项发生更改(属性更改的副作用,或该项更为完整的东西)时,它会通知它的容器/父项
  • 当一个容器被通知时,好吧,你就完了。如果容器可以嵌套,那么如果必要的话,我想它可以向其父容器引发一个事件
相关文章: