设计模式(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);

    }
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值