Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 观察者模式中是否可能有多个主题?_Design Patterns_Observer Pattern - Fatal编程技术网

Design patterns 观察者模式中是否可能有多个主题?

Design patterns 观察者模式中是否可能有多个主题?,design-patterns,observer-pattern,Design Patterns,Observer Pattern,我一直在研究观察者模式,一对多事件。在这种情况下,是否通知了多个类别,即来自一个主题的多个观察者? 相反,我想问的问题是否不止一个?这种情况是否超出了观察者模式并创建了不同的模式 想象一下,一家印刷报纸、杂志和书籍的出版社。用户可以订阅他们想要的任何内容。例如,用户可能只订阅书籍或同时订阅书籍和报纸。每次发布这些类型中的新类型时,都应通知相关用户。不应通知未注册的用户。换句话说,如果用户只注册了书籍,则不会向报纸发送通知 在本例中,主题是出版社吗?或者书籍、报纸和杂志是独立的主题吗?观察者模式用

我一直在研究观察者模式,一对多事件。在这种情况下,是否通知了多个类别,即来自一个主题的多个观察者? 相反,我想问的问题是否不止一个?这种情况是否超出了观察者模式并创建了不同的模式

想象一下,一家印刷报纸、杂志和书籍的出版社。用户可以订阅他们想要的任何内容。例如,用户可能只订阅书籍或同时订阅书籍和报纸。每次发布这些类型中的新类型时,都应通知相关用户。不应通知未注册的用户。换句话说,如果用户只注册了书籍,则不会向报纸发送通知


在本例中,主题是出版社吗?或者书籍、报纸和杂志是独立的主题吗?

观察者模式用于一对多通知。事实上,GoF书中第一章的第一句话是

定义对象之间的一对多依赖关系,以便当一个对象更改状态时,自动通知并更新其所有依赖项

显而易见的解决办法是以出版社为主题。在这个场景中,我的偏好是让主体触发不同类型的事件,并允许观察者分别注册他们感兴趣的每种类型的事件。也可以触发单一事件类型并强制观察者确定发生了什么变化

或者,您可以将每个出版物视为自己的主题。在这个场景中,正如您所提到的,观察者必须向不同的主题注册。我在这里看到的唯一优势是,您可以将观察者与他们不需要知道的出版物分离

这两种选择都是可行的。我建议以出版社为主题