Observer Pattern

In some cases, we need an one-to-many relationship between objects. If one object is modified, its dependent objects are to be notified automatically.

Intent

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

Implementation

Class Diagram of Observer Pattern
// Observable.java
public interface Observable {
    void registerObserver(Observer o);
    void removeObserver(Observer o);
    void notifyObservers();
}
// Observer.java
public interface Observer {
    void update(Data data);
}
// WeatherData.java
public class WeatherData implements Observable {

    public WeatherData() {
        observers = new LinkedList<>();
    }

    public void setData(Data data) {
        this.data = data;
        notifyObservers();
    }

    @Override
    public void registerObserver(Observer o) {
        observers.add(o);
    }

    @Override
    public void removeObserver(Observer o) {
        int i = observers.indexOf(o);
        if (i>=0) {
            observers.remove(i);
        }
    }

    @Override
    public void notifyObservers() {
        for(Observer observer : observers) {
            observer.update(data);
        }
    }

    private List<Observer> observers;
    private Data data;
}

Note: Java has built-in classes/interfaces to facilitate the Observer Pattern. Check out java.util.Observer and java.util.Observable for more information.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Description this week we have a dojo about Observer Patte...
    星期六1111阅读 307评论 0 0
  • 仔细想来,倒也不是个事 。不过是收碗这不用个把分钟的事,当即看到摆在桌上的碗筷,没人去收,可却引起火来。到底是小气...
    绿灯blue阅读 270评论 4 0
  • 对。今天还是像昨天一样无聊。该干的不该干的。我只是觉得我很兴奋,还有一周就可以考试了。虽然考试什么都不会,可是考完...
    闪烁ing阅读 87评论 0 0
  • 骑着野马环游世界 要买一座庄园,饲养所有喜欢的 宠物和狗,我住在里面 和相爱的人一起,一个或者几个 在距离市区不远...
    彭先生10阅读 88评论 0 4