设计模式--观察者模式Observer

来源:互联网 发布:树熊网络登录 编辑:程序博客网 时间:2024/06/05 10:01

定义:

        定义了对象之间的一对多依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。

一:Subject

public interface Subject {void registerObserver(Observer observer);void removerObserver(Observer observer);void notifyObersers();}public class A implements Subject {private ArrayList<Observer> observer;public A() {observer = new ArrayList<Observer>();}@Overridepublic void registerObserver(Observer observer) {// TODO Auto-generated method stubthis.observer.add(observer);}@Overridepublic void removerObserver(Observer observer) {// TODO Auto-generated method stubint index = this.observer.indexOf(observer);if (index >= 0)this.observer.remove(observer);}@Overridepublic void notifyObersers() {// TODO Auto-generated method stubfor (int i = 0; i < observer.size(); i++) {observer.get(i).update(temperature, humidity, pressure);}}public void measurementChanged() {notifyObersers();}}
多:Observer

public interface Observer{    public void  update();    }public class B implements Observer {    public void  update(){}}

类图


实现:

        见链接

使用Java内置的观察者模式:

java/util/Observable  类

    addObserver()

    deleteObserver()

    notifyObservers()

    setChanged()

java/util/Observer  接口

    update()

public class A extends Observable

public class B implements Observer {

    public void  update(){}

}

ps

OO原则

  封装变化 : 在观察者模式中,会改变的是Subject的状态,以及观察者的数目和类型。

  多用组合,少用继承

  针对接口编程,不针对实现编程  :Subject和Observer都使用接口,Observer利用Subject的接口向Subject注册,而Subject利用Observer接口通知Observer。

  **为交互对象之间的松耦合设计而努力

  要点:
    观察者模式定义了对象之间一对多的关系。
    主题用一个共同的接口来更新观察者。
    观察者和可观察者之间用松耦合方式结合(loosecoupling),可观察者不知道观察者的细节,只知道观察者实现了观察者接口。
    Swing大量使用观察者模式,许多GUI框架也是如此。
    JavaBeans 、RMI


0 0