为什么观察者设计模式通常被描绘成一对多?
Why is Observer design pattern usually portrayed as one-to-many?
在研究 Observer pattern
时我注意到,Subject
和 Observer
之间的联系通常是一对多的。为什么这样?多对多关系可能会导致任何问题有什么特别的原因吗?
使用观察者设计模式设计的系统旨在为主体提供便利,让其拥有多个观察者,并在主体的状态发生变化时通知他们。那是教科书上的定义。
让我们来看一个真实世界的用例 - 报纸和订阅者。一家报业公司向订阅它的人发送报纸。它出版报纸,人们订阅它。
根据您的查询,这些订阅者可以订阅许多报纸。所以,它应该是many-to-many。如果您考虑系统的设计和开发是为了迎合所有订户和所有报纸,那么它似乎就是如此。那么这个subscriber-newspaper宇宙就是many-to-many。你是对的。正如上面评论中所讨论的那样 - Twitter 句柄有多个订阅者订阅了多个 Twitter 句柄。 Many-to-many 是的。
但是有一个问题。
实际上是为了回答您的问题 - 我们需要将 publisher-subscriber 之间的 many-to-many 关系分解为两部分 -
1. One-To-Many 从发布者到订阅者
2. One-To-Many 从订阅者到发布者
One-To-Many 从出版商到订阅者一直被使用 - 报纸出版商向其订阅者分发报纸,推文出现在关注者提要中等。
但是,从订阅者到发布者的 one-to-many 关系真的有用吗?我的意思是,以多人订阅的推特账号为例。假设一位订阅者发布了一些推文。此信息是否反向流向推特句柄 he/she?不知道。twitter 用户知道他们的粉丝发了推文吗?不知道。
信息确实不是 从订阅者到发布者,或者观察者到主题的反向流动。那么,如果没有信息从观察者流向主体——为什么要为它设计!这就是你的答案。
虽然可观察对象(有时称为主体)通常有多个观察者,但我认为不必超过一个。
同意,可能会有观察者观察数据模型并将数据呈现为饼图、图表和 table。
我有一个案例,我有三个 Android 片段更改我的数据模型(Observable),但只有一个 Observer(我的 Main Activity)总结了当前状态。
在研究 Observer pattern
时我注意到,Subject
和 Observer
之间的联系通常是一对多的。为什么这样?多对多关系可能会导致任何问题有什么特别的原因吗?
使用观察者设计模式设计的系统旨在为主体提供便利,让其拥有多个观察者,并在主体的状态发生变化时通知他们。那是教科书上的定义。
让我们来看一个真实世界的用例 - 报纸和订阅者。一家报业公司向订阅它的人发送报纸。它出版报纸,人们订阅它。
根据您的查询,这些订阅者可以订阅许多报纸。所以,它应该是many-to-many。如果您考虑系统的设计和开发是为了迎合所有订户和所有报纸,那么它似乎就是如此。那么这个subscriber-newspaper宇宙就是many-to-many。你是对的。正如上面评论中所讨论的那样 - Twitter 句柄有多个订阅者订阅了多个 Twitter 句柄。 Many-to-many 是的。
但是有一个问题。
实际上是为了回答您的问题 - 我们需要将 publisher-subscriber 之间的 many-to-many 关系分解为两部分 - 1. One-To-Many 从发布者到订阅者 2. One-To-Many 从订阅者到发布者
One-To-Many 从出版商到订阅者一直被使用 - 报纸出版商向其订阅者分发报纸,推文出现在关注者提要中等。
但是,从订阅者到发布者的 one-to-many 关系真的有用吗?我的意思是,以多人订阅的推特账号为例。假设一位订阅者发布了一些推文。此信息是否反向流向推特句柄 he/she?不知道。twitter 用户知道他们的粉丝发了推文吗?不知道。 信息确实不是 从订阅者到发布者,或者观察者到主题的反向流动。那么,如果没有信息从观察者流向主体——为什么要为它设计!这就是你的答案。
虽然可观察对象(有时称为主体)通常有多个观察者,但我认为不必超过一个。 同意,可能会有观察者观察数据模型并将数据呈现为饼图、图表和 table。 我有一个案例,我有三个 Android 片段更改我的数据模型(Observable),但只有一个 Observer(我的 Main Activity)总结了当前状态。