是否可以在观察者模式中拥有多个主题?

Is it possible to have multiple subjects in Observer pattern?

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

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

的通知

在这个例子中,主题是出版社吗?或者 书籍报纸杂志是不同的主题吗?

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

Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.

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

或者,您可以将每个单独的出版物视为自己的主题。在这种情况下,正如您提到的,观察者必须注册不同的主题。我在这里看到的唯一优势是您可以让观察者与他们不需要知道的出版物脱钩。

两种选择都可行。我会推荐出版社作为主题。