Ruby中的可观察模式冗余

时间:2015-01-20 07:01:13

标签: ruby-on-rails ruby design-patterns

Observable模块使用change方法作为切换方式,当观察者应该获得Subject中任何状态变化的更新时。但是,对我来说这似乎是多余的,因为notify_observers(self)会故意调用它。是否存在让change产生影响的情况?

1 个答案:

答案 0 :(得分:2)

它允许分时计时和多次更改而没有副作用。

  • 在应用程序的子流程中,对象的状态可能会也可能不会发生变化。如果它发生变化,则可以调用.change而没有任何副作用。也可以多次调用它。

  • 稍后,可以发送通知。只要在采取任何相关行动之前发送它们,那么由于原始更改而依赖于更新的任何内容都应该能够正确地进行更新

例如,如果更改后的处理成本高(I / O,CPU时间,网络带宽),但只需要在第二部分代码之前完成,就可以执行此操作,不仅仅是每次发生变化。

如果并非所有代码路径都严格需要更新,您也可以这样做。即有时您会因为更改而关心更新,但有时则没有必要,任何更改都可以忽略。

如果您需要在每次XML创建代码使用的内容对象具有属性更改时重新生成XML文档,则可能是一个示例。您可以将.change的调用放在内容对象的重要属性设置器中,将它们隐藏在外部调用者之外。每次调用content.property=时,您都不希望生成新的XML文档(可能非常慢),而是等到完成更新后再对content.notify_observers发出一次调用可能的变化。