rest - 休息应用程序中的观察者设计模式

标签 rest design-patterns observer-pattern stateless

我正在尝试学习设计模式,并且我使用了观察者模式。我想我理解这个概念本身,但我不知道什么时候使用它。

我试着解释一下自己。我主要使用 Web 应用程序,因此,无状态应用程序。通常,客户端从浏览器发出请求(例如,更新一条记录)。则操作完成。

假设我想在每次更新记录时通知一些人。在我看来,Observer patter 的完美场景,但当我想到它时,它会像这样结束:

  • 用户请求更新。
  • 获取所有需要通知的人。
  • 将所有需要通知的人员放入观察者中。
  • 进行更新。 (这也将为观察者模式发出通知)。

但是......这样做,我必须迭代所有我想通知的人两次!

而且因为它是一个无状态的应用程序,所以我每次都必须去找所有需要通知的人!

我不知道观察者模式是否对其他类型的应用程序更有用,但我只能以静态形式考虑这种模式,我的意思是,使观察者成为静态的。

我知道我失去了一些东西,这是一个普遍且被接受的模式,每个人都接受它作为这个具体问题的有效解决方案。我不明白什么?

最佳答案

首先,让我们理清术语。

  • 每个希望收到通知的人都是一个观察者
  • 可以触发通知的每种类型的事件都是一个Observable

每个Observer(人)都需要向服务器注册自己。它发送一个请求,本质上是说“我对 foo Observables 感兴趣”,在本例中是“我对更新事件感兴趣”。服务器维护谁对哪些事件感兴趣的映射。

每次服务器进行更新时,它都会遍历更新观察者的映射并向每个观察者发送通知。

优点是服务器及其 Observables 在编译时不知道谁是观察者。观察者可以在运行时为他们感兴趣的任何事件自由注册(和注销)自己。

关于rest - 休息应用程序中的观察者设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35622481/

相关文章:

REST API 批准/拒绝用户

rest - 如何将此 REST 请求形成为 header 、基本身份验证

java - AsyncTask 更好的通信协议(protocol)

java - 在构造函数中传递参数的最佳方式

c++ - 还是观察者模式?

ios - Node.js 服务器向 iOS 应用程序发送信息

java - 为什么我只能在 RESTlet 中将 Representation 转换为字符串一次?

Java:装饰器模式 - 对主要抽象类的引用

linq - 使用 IQueryable<T> 的设计模式

ruby-on-rails - 为触发邮件程序的观察者编写规范