美文网首页Android技术知识JavaJava 杂谈
java设计模式-观察者模式(Observer)

java设计模式-观察者模式(Observer)

作者: yiqiquhuxi | 来源:发表于2019-08-20 13:31 被阅读38次

    观察者模式属于行为型模式,指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式。

    从字面意思理解,就是我们使用过的发布订阅一样的功能,”牵一发而动多个地方“的时候我们可以使用观察者模式。比如:
    1:老师布置家庭作业,所有的学生接收到消息,并且去执行。
    2:领导给员工传递会议精神。
    3:群发短信功能。


    UML图如下文:

    观察者模式原型图

    1:Observable,抽象类,被观察对象,里面有对观察者的集合操作,通知观察者的操作。
    2:ConcreteObservable,具体被观察对象(当然可以和Observable合并成一个类使用)。
    3:Observer,抽象类,观察者。
    4:ConcreteObserver,具体观察者类。


    代码如下:

    观察者抽象类:

    观察者抽象类

    观察者具体类:

    具体观察者类

    被观察者抽象类:

    被观察者抽象类

    被观察者具体类:

    被观察者具体类

    测试代码:

    测试结果

    代码其实很简单:
    1:张三李四都是具体的观察者(Observer)
    2:张三李四被添加到被观察对象(Observable)集合中
    3:在被观察对象(Observable)里面循环去调用张三李四的(notif方法),起到了一个循环通知的作用。

    简单代码就实现了发布订阅的功能,这就是我们的观察者模式,是不是很简单?


    JDK中的自带的观察者类:

    观察者抽象类: java.util.Observer
    被观察者对象抽象类: java.util.Observable

    观察者抽象类: java.util.Observer 源码

    观察者源码

    被观察者对象抽象类: java.util.Observable 源码

    被观察对象源码

    1: java.util.Observer 源码中,就一个 update(Observable o, Object arg) 方法,可以根据不同的被观察者对象的通知做出更新操作。
    2: java.util.Observable 源码,里面有我们的观察者对象集合(Vector),和集合操作方法(add,deleteObserver等等),以及我们通知方法(notify)。

    我们直接使用jdk源码写的demo:

    具体观察者类(只有一个方法被重写):

    具体观察者类

    具体被观察对象类:

    具体被观察对象类

    测试:

    测试结果

    大家看到这里,有没有发现观察者模式和前面2节中介者模式及其的相似,不论是UML图,还是代码书写(都有集合),我们下节再具体分析两个设计模式的异同点。

    相关文章

      网友评论

        本文标题:java设计模式-观察者模式(Observer)

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