zoukankan      html  css  js  c++  java
  • 十一个行为模式之观察者模式(Observer Pattern)

    定义:
    定义对象之间一种一对多的关系,当被观察者状态变化时,可以自动地通知观察者并执行相关的业务操作。观察者模式又被称为发布-订阅模式等。

    结构图:

    • Subject:抽象主题类,定义了所有被观察类的通用接口。一般内部持有一个观察者集合引用,用于维护完成自身的观察者们,并且定义了一系列方法来增加和删除观察者对象。当调用notify()方法来进行通知时,一般会遍历观察者集合来依次进行通知。
    • ConcreteSubject:具体主题类,被观察者对象。实现了抽象类关于观察者的所有接口和自身的业务方法。当自身的状态发生变化时,则向各个观察者发出通知。
    • Observer:观察者类,定义了所有观察者类被通知时被调用的通用接口。
    • ConcreteObserver:具体观察者,实现了抽象观察者中定义的事件处理接口。同时一般也维护一个subject对象,用于获得subject的状态信息或者将自己从观察者集合中 移除。

    JDK中的观察者模式
    在JDK总定义了Observable和Observer接口,用于实现观察者模式,其UML图如下:

    • JDK从1.0后便采用了DEM(DelegationEvent Model)模型,用于事件的处理。事件源对象、事件监听对象和事件对象组成了事件模型的三要素。

    优点:

    • 观察者模式可以实现表示层和数据逻辑层的分离,典型的MVC模型就采用的观察者模式。View层观察Model层,当Model层数据变化时,对应的View自动变化。
    • 观察者模式只是在观察者和观察目标间建立了一个抽象的耦合,因此可以通过抽象接口对两个部分进行独立地扩展。
    • 观察者模式支持广播通信,观察目标可以一对多的通知观察者。

    缺点:

    • 如果一个观察者目标被注册了很多观察者,则观察者的通知方法会很耗费系统性能。
    • 有可能在观察者和被观察者之间存在循环依赖,导致系统崩溃。

    实例:
    ObserverPattern.java

  • 相关阅读:
    js判断undefined类型
    js replace 全部替换
    第五次作业--原型设计
    第三次作业--团队展示
    第二次作业——数独终盘
    软件工程实践2017第一次作业
    课堂作业2
    课堂作业1
    第四次作业 计算器第二步
    第三次作业
  • 原文地址:https://www.cnblogs.com/zhangfei614/p/6092927.html
Copyright © 2011-2022 走看看