观察者模式

对象之间是多对一依赖的一种设计方案,被依赖的对象为Subject,依赖对象为Observer,Subject通知Observer变化


观察者模式_第1张图片
image.png

Subject: 负责注册——通知——撤销注册
Observer:将自己注册到被观察对象(Subject)中,被观察对象将观察者存放在一个容器(Container)里。
例子:
设计模型:气象站
特点: 气象站负责温度,气压,湿度的收集。等到变化时通知公告板,广播公告等。

public interface Subject {
    public void registerObserver(Observer o);
    public void removeObserver(Observer o);
    public void notifyObservers();
}
public interface Observer {
    public void update(float mTemperatrue,float mPressure,float mHumidity);
}
//气象站
public class WeatherDataSt implements Subject{
    
    private float mTemperatrue;
    private float mPressure;
    private float mHumidity;
    private ArrayList mObservers;
    public WeatherDataSt(){
        mObservers=new ArrayList();
    }
    public void dataChange(){
        notifyObservers();
    }
    //模拟设置天气参数
    public void setData(float mTemperatrue,float mPressure,float mHumidity){
        this.mTemperatrue=mTemperatrue;
        this.mPressure=mPressure;
        this.mHumidity=mHumidity;
        dataChange();
    }
    @Override
    public void registerObserver(Observer o) {
        // 注册
        mObservers.add(o);
    }
    @Override
    public void removeObserver(Observer o) {
        // 撤销注册
        if(mObservers.contains(o))
        {mObservers.remove(o);}
    }
    @Override
    public void notifyObservers() {
              //遍历所有观察者,通知天气参数发生变化
        for(int i=0,len=mObservers.size();i

你可能感兴趣的:(观察者模式)