zoukankan      html  css  js  c++  java
  • 设计模式-观察者模式(Subject-Observer)

    背景:建立一个应用,利用后台的核心对象WeatherData获取气象站的数据,并更新应用的的三个布告板:目前状况、气象统计和天气预报。一旦后台的WeatherData数据有更新,布告板应该马上更新,或者知道数据更新了,从而执行刷新操作。系统应该可扩展,让用户可以随心所欲的添加删除布告板。

    气象应用模型图

    此题主要是讲观察者模式,那么解决此问题的办法自然是观察者模式,先看看什么是观察者模式。

    观察者模式
    在这里WeatherData,从探测器处获取数据,从而持有数据,然后布告板有N个,当数据变化时每个布告板都从WeatherData处获取一样的数据来更新各自的布告板,那么可以理解:N个布告板从WeatherData处订阅数据,当WeatherData的数据出现变化时,便广播给布告板,它们一对多的关系,此处将WeatherData称之为‘主题’,布告板称为‘观察者’,‘主题’+‘观察者’=观察者模式

    这里写图片描述

    实现观察者最常见的是包含Subject与Observer接口的类设计,关系看以下类图
    这里写图片描述

    Subject接口定义主题的订阅、取消订阅等方法。Subject的实现类即真正的主题(仅一个实现)、数据的持有者,使用ArrayList集合来记录实现了Observer接口的订阅者(多个实现)。观察者持有Subject的引用,方便注册订阅、取消订阅。

  • 相关阅读:
    DLinq[新特性]
    破解 iPod Touch[转]
    iPod Touch Online
    谈到Model View Presenter模式之后的随笔[讨论版]
    各家银行买"基金"如何省钱
    WF随笔系列之二 架构、编译、序列化
    JavaScript AppendChild 引发的思考
    IEquatable接口
    DLinq查询
    基金小窍门:如何判断基金的赚与赔
  • 原文地址:https://www.cnblogs.com/wssongyue/p/13379585.html
Copyright © 2011-2022 走看看