• 设计模式-观察者模式(Subject-Observer)


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

    气象应用模型图

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

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

    这里写图片描述

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

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

  • 相关阅读:
    poj2954
    bzoj1863
    bzoj2002
    bzoj1389
    [POJ3041] Asteroids(最小点覆盖-匈牙利算法)
    [POJ2594] Treasure Exploration(最小路径覆盖-传递闭包 + 匈牙利算法)
    [POJ2446] Chessboard(二分图最大匹配-匈牙利算法)
    [luoguP1266] 速度限制(spfa)
    [luoguP1186] 玛丽卡(spfa)
    [luoguP1027] Car的旅行路线(Floyd)
  • 原文地址:https://www.cnblogs.com/wssongyue/p/13379585.html
Copyright © 2020-2023  润新知