首页 > 解决方案 > Java 观察者模式或发布者-订阅者模式的变体

问题描述

以下 2 种变化的实际观察者模式是什么。

  1. 在第一个中,观察者负责订阅。
  2. 但在第二种情况下,Publisher 负责将特定的观察者添加到订阅者列表中。

因为,Web 中有一些实现,它们都将它们作为 Java 中的观察者模式。

    1.
    // Observer is taking the responsibility of subscribing 
    // Observer.java
    @Override
    public void subscribe(MessagePublisher publisher) {
        publisher.getObservers().add(this);
    }

2.

    // Publisher is taking the observer to subscribe
    // Publisher.java
     @Override
     public void addObserver(Observer observer) {
       observers.add(observer);
     }

标签: javadesign-patternspublish-subscribeobserver-pattern

解决方案


观察者是否应该注册自己或让另一个实体处理此责任是应用观察者模式时的实现决策,而不是模式本身的结构方面。出于这个原因,遇到这两种变体也就不足为奇了。

在 GoF 书籍和其他地方记录的模式结构中,Subject有一个Attach(and Detach) 方法作为其接口的一部分。这意味着任何引用主题的实体都可以调用Attach并执行此注册。


推荐阅读