观察者模式

原创 2017年08月01日 19:28:20

定义

定了了对象之间的一对多依赖,这样依赖,当一个对象改变状态时,它的所有依赖者都会受到通知并自动更新

在具体实现中,开发者可以自己定义一整套观察者框架,也可以利用java提供的api实现这个模式

自定义实现观察者模式

观察者模式主要在解耦方面有巨大的作用,开发者可以自己实现整个观察者模式框架,一般会实现了观察者接口,这个接口的必需的一个方法是提供 主题(被观察者)状态发生变化时,需要调用的,像Observer接口中的receiverNews方法

public interface Observer {

    public void receiverNews(News news);

}

主题接口一般最少提供三个方法,一个观察者注册接口,一个移除接口,一个通知接口。
所有主题类必需实现该接口。具体的代码见我的github代码

依赖JDK实现观察者模式

利用java api
被观察者实现类需要extends Observable,观察者需要implements Observer接口

被观察者发布新状态需要先调用setChanged(),然后调用notifyObservers()。这里setChanged方法存在的意义是为了 规避当被观察者数据虽然更新了,但数据其实是没变的。例如一个天气系统,第一次被观察者更新温度数据21°,通知其订阅者,订阅者收到消息后作出相应的改变,第二次被观察者更新的温度数据还是21°,这时候就没必要在发送(当然这个根据你的业务,如果系统要求不变也得发送那你就可以忽视了)。
notifyObservers方法是通知所有订阅者的方法,可以将发送的数据放在这个方法里。

所有的观察者都要实现observer接口并且必需复写其update方法,

@Override
    public void update(Observable topic, Object content) {

        if(topic instanceof NewsOfficeJDK){
            System.out.println("alice received a news about "+ ((News)content).getTitle()+" from "+((NewsOfficeJDK)topic).getName());
        }else if(topic instanceof JavaOfficeJDK){
            System.out.println("alice received a news about "+ ((News)content).getTitle()+" from Java ");
        }

    }

第一个参数Observable是消息的发送者,第二个参数时消息内容。
感觉利用jdk实现观察者模式是很不方便的,并且被观察者必需继承Observable类,其实自己实现这个模式代价可以忽略不计,而且可以随意修改。

观察者模式提示是挺好理解的,就简答的讲述这么多。

我的示例代码
https://github.com/yangzhenkun/DesignPatternLearn/tree/master/src/main/java/com/yasin/DesignPatternLearn/ObserverPattern

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

观察者模式for android demo

  • 2017年09月30日 11:09
  • 22MB
  • 下载

Android基于观察者模式下载管理

  • 2017年11月08日 11:45
  • 459KB
  • 下载

Android 中的观察者模式Observer

Android 中的观察者模式 实现的简单框架。

Java的观察者模式

  • 2015年12月29日 21:59
  • 10KB
  • 下载

观察者模式练习

  • 2015年12月09日 20:35
  • 6KB
  • 下载

java:从消息机制谈到观察者模式

观察者模式,顾名思意就是观察与被观察的关系,比如你在烧开水得时时看着它开没开,你就是观察者,开水就是被观察者;再比如说你在带小孩,你关注她是不是饿了,是不是喝了,是不是撒尿了,你就是观察者,小孩就被观...

观察者模式框架2

  • 2017年08月11日 21:42
  • 48B
  • 下载

观察者模式

  • 2013年03月07日 23:49
  • 17KB
  • 下载

对象间的联动——观察者模式(六)

22.6 观察者模式与MVC       在当前流行的MVC(Model-View-Controller)架构中也应用了观察者模式,MVC是一种架构模式,它包含三个角色:模型(Model),视图(V...

观察者模式

  • 2012年11月05日 23:29
  • 4KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:观察者模式
举报原因:
原因补充:

(最多只允许输入30个字)