观察者模式之Java实现方式

来源:互联网 发布:旁氏米粹 知乎 编辑:程序博客网 时间:2024/06/06 09:44

在前面我已经写了一个自己手写的观察者模式的实习,现在呢,利用java提供的观察者模式来显示,大家看懂了前面我写的,下面的代码也能够理解:
对应具体的目标对象的实现

package com.test;import java.util.Observable;/** * @author mqc * 对应具体的目标对象的实现 */public class WeatherSubject extends Observable {    /**     * 对应的天气的内容     */    private String content;    public String getContent() {        return content;    }    public void setContent(String content) {        this.content = content;        //必须要调用这个函数,不能够缺少        this.setChanged();        //通知当前定义的所有的目标对象,首先利用推模型的方式进行推送        this.notifyObservers(content);        //无参数的调用方式是拉模型的方式,java进行了封装//      this.notifyObservers();    }}

对应的观察者对象的定义

package com.test;import java.util.Observable;import java.util.Observer;/** * @author mqc * 对应的观察者对象的定义 */public class WeatherObserver implements Observer {    /**     * 当前观察者的名字     */    private String observerName;    @Override    public void update(Observable o, Object arg) {        //首先推送的方式        System.out.println(observerName+"接收到了目标对象推送的"+arg);        //然后是拉模式        System.out.println(observerName+"从目标对象拉取得到:"+((WeatherSubject)o).getContent());    }    public String getObserverName() {        return observerName;    }    public void setObserverName(String observerName) {        this.observerName = observerName;    }}

对应的测试代码:

package com.test;import org.junit.Test;public class TestWeather {    @Test    public void test(){        //首先创建对应的目标对象        WeatherSubject subject = new WeatherSubject();        //其次创建对应的观察者        WeatherObserver os1 = new WeatherObserver();        WeatherObserver os2 = new WeatherObserver();        os1.setObserverName("小明");        os2.setObserverName("小五");        //然后注册这些观察者        subject.addObserver(os1);        subject.addObserver(os2);        //改变目标对象的状态        subject.setContent("今天天气晴朗,温度25°");    }}

运行结果:
小五接收到了目标对象推送的今天天气晴朗,温度25°
小五从目标对象拉取得到:今天天气晴朗,温度25°
小明接收到了目标对象推送的今天天气晴朗,温度25°
小明从目标对象拉取得到:今天天气晴朗,温度25°

原创粉丝点击