Oop 为什么观察者设计模式通常被描述为一对多?

Oop 为什么观察者设计模式通常被描述为一对多?,oop,design-patterns,observer-pattern,software-design,Oop,Design Patterns,Observer Pattern,Software Design,在研究观察者模式时我注意到,受试者和观察者之间的联系通常是一对多的。为什么会这样?多对多关系可能导致任何问题,有什么特殊原因吗?使用观察者设计模式设计的系统旨在为受试者提供设施,使其拥有多个观察者,并在受试者状态发生变化时通知他们。这是教科书上的定义 让我们看一个真实世界的用例——报纸和订阅者。报社向订阅它的人发送报纸。它出版报纸,人们订阅 根据您的查询,这些订阅者可以订阅许多报纸。所以,它应该是多对多的。看来,如果你认为该系统的设计和开发迎合所有用户和所有报纸。那么这个订阅报纸的世界是多对多的

在研究
观察者模式时
我注意到,
受试者
观察者
之间的联系通常是一对多的。为什么会这样?多对多关系可能导致任何问题,有什么特殊原因吗?

使用观察者设计模式设计的系统旨在为受试者提供设施,使其拥有多个观察者,并在受试者状态发生变化时通知他们。这是教科书上的定义

让我们看一个真实世界的用例——报纸和订阅者。报社向订阅它的人发送报纸。它出版报纸,人们订阅

根据您的查询,这些订阅者可以订阅许多报纸。所以,它应该是多对多的。看来,如果你认为该系统的设计和开发迎合所有用户和所有报纸。那么这个订阅报纸的世界是多对多的。你是对的。正如上面评论中所讨论的,Twitter句柄有多个订阅多个Twitter句柄的订阅者。是多对多

但还有一个陷阱

实际上,为了回答您的问题,我们需要将发布者和订阅者之间的多对多关系分解为两部分- 1.从发布服务器到订阅服务器的一对多 2.从订阅者到发布者的一对多

从出版商到订阅者的一对多一直在使用——报纸出版商向订阅者分发报纸,推特出现在追随者订阅源中等

但是,从订阅者到发布者的一对多关系真的有什么用处吗。我的意思是,以他们订阅的多个人和推特句柄为例。假设一个用户发了一些tweet。这些信息是否与他/她关注的推特手柄方向相反?没有。推特手柄知道他们的追随者在推特上发了什么吗?没有。
信息不会以相反的方向从订阅者流向发布者,或者从观察者流向主题。那么,如果观察者和被观察者之间没有信息流动,为什么要为它设计呢!这就是你的答案。

虽然通常有多个观察者(有时称为主体),但我认为不必有多个观察者。 同意,可以有观察者观察数据模型,并将数据呈现为饼图、图表和表格。
我有一个例子,我有三个Android片段改变了我的数据模型(可观察的),但只有一个观察者(我的主要活动)总结了当前状态。

像twitter一样看吗?您有一个twitter帐户(
主题
)并发布您的新闻,许多人(
观察者
)可以观察您的twitter帐户以获得有关您新闻的通知。所以你有一对多的关系。但是在这种情况下,其他人(
Observer
)可能会关注多个twitter帐户(
Subject
)。这将使连接成为多对多。我错了吗?所以我想你说的是,观察者模式是从
主题
出版商
)的角度提出的。在这方面,
主题
并不真正关心
观察者
订户
)是否有任何其他
主题
是的。这可能是管理这些发行者和订阅者的整个系统的问题。例如,twitter作为一个整体可能会有一些政策,这些政策可能会担心所有订户都会遵循谁的原则。但是从观察者设计模式实现中的基本主题观察者上下文来看,这个主题并不关心,这对我来说很合适。谢谢你的回答。关于这个问题的进一步讨论,我建议阅读Eric Evans的书《域驱动设计》。他提出了一个非常相似的观点,即通过隔离关系的工作方向,有两种效果。一方面简化了模型(1:n关系更容易推理),另一方面突出了模型的一个重要方面。当然,在不同的领域中,您可能会发现方向不同,但在任何给定的领域中,一个方向比另一个方向更有用。