设计模式——观察者模式

被观察者(Observable)是一个类,使用继承extends,因为它无需子类再去实现什么东西。观察者(Observer)是一个接口,使用实现implements,因为它需要子类去实现update函数,这个函数在被观察者发生变化时被执行。
一般可理解为,Observable是一个中心数据库,Observer是许多个视图,用于从各个方面展示数据库的数据。

//SimpleObserver.java
package org.shu.pxz;
import java.util.Observable;
import java.util.Observer;

public class SimpleObserver implements Observer
{
    public SimpleObserver(SimpleObservable simpleObservable){
        simpleObservable.addObserver(this);//由于是被观察者去通知观察者,那么注册就需要调用被观察者的函数
    }

    public void update(Observable observable , Object data){
        System.out.println("Data has changed to " + ((SimpleObservable) observable).getData());
    }
}

//SimpleObservable.java
package org.shu.pxz;
import java.util.Observable;

public class SimpleObservable extends Observable
{
    private int data = 0;

    public int getData(){
        return data;
    }

    public void setData(int i){
        if(this.data != i) {
            this.data = i;
            setChanged();//Observable类的成员函数

            //只有在setChange()被调用后,notifyObservers()才会去调用update(),否则不调用
            notifyObservers();//Observable类的成员函数
        }
    }
}

//SimpleTest.java
import org.shu.pxz.SimpleObservable;
import org.shu.pxz.SimpleObserver;

public class SimpleTest
{
    public static void main(String[] args){
        SimpleObservable doc = new SimpleObservable ();//先有中心数据库,再有视图
        SimpleObserver view = new SimpleObserver (doc);//拿视图向中心数据库注册
        doc.setData(1);
        doc.setData(2);
        doc.setData(2);
        doc.setData(3);
    }
}

//output
Data has changed to 1
Data has changed to 2
Data has changed to 3
posted @ 2017-04-08 23:12  水煮海鲜  阅读(338)  评论(0编辑  收藏  举报