美文网首页Java
观察者模式

观察者模式

作者: 生于七月的怪人 | 来源:发表于2019-05-20 14:48 被阅读0次

    首先理解一下观察者模式的定义:

          定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。

    直译:

          建立一个一(Subject)对多(Observer)的关系,能够使得当"一"变化的时候,依赖这个"一"的多也能够同步改变。

    观察者模式所涉及的角色有:

    抽象主题(Subject)角色:即被观察者(Observable)的角色,主题的抽象类,抽象主题角色把所有观察者对象的引用保存在一个集合里,每个主题都可以有任意数量的观察者,抽象主题提供一个接口,可以增加和删除观察者对象。

    具体主题(ConcreteSubject)角色:即具体被观察者(ConcreteObservable),此角色将有关状态存入具体观察者对象,在具体主题的内部状态发生改变时,给所有注册过的观察者发出通知。

    抽象观察者(Observer)角色:此角色是观察者的接口类,它定义了一个更新接口,在得到主题的通知时更新自己。

    具体观察者(ConcreteObserver)角色:该主题实现抽象观察者角色所定义的更新接口,以便在主题的状态发生变化时更新自身的状态。

    在JAVA语言的API中,提供了一个Observable抽象类以及一个Observer接口,构成JAVA语言对观察者模式的支持。

    Observable抽象类:   抽象主题角色,具体主题类必须继承该抽象类,同时抽象主题提供一个接口,可以增加和删除观察者对象以及一个消息通知方法。

    Observer接口类:   抽象观察者角色,具体观察者必须实现该接口,同时它定义了一个更新接口,具体观察者必须实现该更新方法。

    观察者模式需要用到的Java类

    1 java.util.Observable

    -able一般可能...的单词后缀,Observable就是可以被观察的,程序中的被观察者类,需要继承这个类。

    2 java.util.Observer

    这个是观察者,是接口。程序中的观察者类,需要实现这个接口中的update()方法。

    观察者模式的JAVA Demo:

    (1)观察者对象User  一个接口类,必须实现update方法(获取更新消息)

    (2)被观察者对象OfficialAccount ,需要重写一个消息通知方法(publishnewInfo)

    (3)测试主类

    测试结果:

    添加三个监听者,三个监听者都可以收到消息,删除掉一个监听者,只有剩下两个监听者可以收到消息。

    User是具体的观察者,他们订阅了OfficialAccount这个具体的可观察对象,当OfficialAccount有更新时,会遍历所有观察者。然后给这些观察者发布一个更新消息,之后User中的update方法会调用,这样就达到了一对多的通知功能。

    ---------------------

    原文:https://blog.csdn.net/qq_35571554/article/details/82769758

    相关文章

      网友评论

        本文标题:观察者模式

        本文链接:https://www.haomeiwen.com/subject/pqskzqtx.html