设计模式(2)_JAVA内置观察者模式

设计模式(2)_JAVA内置观察者模式

服务站 需继承java.util.observable(注册,取消,通知)

观察者 需实现java.util.observer(更新)

1.服务站(weatherData)

package Java内置观察者模式_气象站大屏展示.Subject.subjectIns.观察者模式_气象站大屏展示.Subject.subjectIns;

import java.util.Observable;

public class weatherDataSub extends Observable {

    /////////////气象观察站功能
    //数据变化,实时通知观察者
    public void setData(float mTemparature,float mPressure,float mHimidity){
        weatherData weatherData = new weatherData(mTemparature,mPressure,mHimidity);
        this.setChanged();//设置是否通知,可以用于对是否通知的控制
        this.notifyObservers(weatherData);//将通知消息发送给观察者
        this.notifyObservers();//只通知,不发送通知消息
    }

    public class weatherData{
        public float mTemparature,mPressure,mHimidity;//温度//气压//湿度
        public weatherData(float mTemparature, float mPressure, float mHimidity) {
            this.mTemparature = mTemparature;
            this.mPressure = mPressure;
            this.mHimidity = mHimidity;
        }
    }

}

2.观察者

--1.当日气象大屏(todayCondition)

package Java内置观察者模式_气象站大屏展示.Subject.subjectIns.观察者模式_气象站大屏展示.Observe.observerIns;

import Java内置观察者模式_气象站大屏展示.Subject.subjectIns.观察者模式_气象站大屏展示.Subject.subjectIns.weatherDataSub;

import java.util.Observable;
import java.util.Observer;

/**
 * 使用Java内置观察者Observer
 */
public class todayCondition implements Observer {
    //////////////////////////////////////////
    /**
     * //展示通知消息(控制台打印输出)
     * @param notification
     */
    public void display(Object notification){
        weatherDataSub.weatherData weatherData = (weatherDataSub.weatherData) notification;
        System.out.println("*****************最新通知****************************");
        System.out.println("****today温度:"+weatherData.mTemparature+"*********");
        System.out.println("****today气压:"+weatherData.mPressure+"*********");
        System.out.println("****today湿度:"+weatherData.mHimidity+"*********");
        System.out.println("**************************************************");

    }
    /**
     * 更新通知
     * @param o
     * @param arg
     */
    @Override
    public void update(Observable o, Object arg) {
        this.display(arg);//展示通知消息(控制台打印输出)
    }
}

--2.明日气象大屏(tomorrowCondition)

package Java内置观察者模式_气象站大屏展示.Subject.subjectIns.观察者模式_气象站大屏展示.Observe.observerIns;

import Java内置观察者模式_气象站大屏展示.Subject.subjectIns.观察者模式_气象站大屏展示.Subject.subjectIns.weatherDataSub;

import java.util.Observable;
import java.util.Observer;

/**
 * 使用Java内置观察者Observer
 */
public class tomorrowCondition implements Observer {
    //////////////////////////////////////////
    /**
     * //展示通知消息(控制台打印输出)
     * @param notification
     */
    public void display(Object notification){
        weatherDataSub.weatherData weatherData = (weatherDataSub.weatherData) notification;
        System.out.println("*****************最新通知****************************");
        System.out.println("****tomorrow温度:"+(++weatherData.mTemparature)+"*********");
        System.out.println("****tomorrow气压:"+(++weatherData.mPressure)+"*********");
        System.out.println("****tomorrow湿度:"+(++weatherData.mHimidity)+"*********");
        System.out.println("*******************************************************");
    }
    /**
     * 更新通知
     * @param o
     * @param arg
     */
    @Override
    public void update(Observable o, Object arg) {
        this.display(arg);//展示通知消息(控制台打印输出)
    }
}

3.Test

package Java内置观察者模式_气象站大屏展示.Subject.subjectIns.观察者模式_气象站大屏展示;

import Java内置观察者模式_气象站大屏展示.Subject.subjectIns.观察者模式_气象站大屏展示.Observe.observerIns.todayCondition;
import Java内置观察者模式_气象站大屏展示.Subject.subjectIns.观察者模式_气象站大屏展示.Observe.observerIns.tomorrowCondition;
import Java内置观察者模式_气象站大屏展示.Subject.subjectIns.观察者模式_气象站大屏展示.Subject.subjectIns.weatherDataSub;
import org.junit.Test;

/**
 * Java内置观察者模式测试
 */
public class test {
    @Test
    public void test01() {
        //初始化
        weatherDataSub weatherDataSub= new weatherDataSub();//气象服务站
        todayCondition todayCondition = new todayCondition();//观察者1
        tomorrowCondition tomorrowCondition = new tomorrowCondition();//观察者2
        //注册观察者
        weatherDataSub.addObserver(todayCondition);
        weatherDataSub.addObserver(tomorrowCondition);
        //气象服务站数据更新
        weatherDataSub.setData(30,60,110);
        //移除观察者2
        weatherDataSub.deleteObserver(tomorrowCondition);
        System.out.println("观察者2取消注册!");
        //气象服务站数据更新
        weatherDataSub.setData(60,120,210);

    }
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章