
设计模式可能是一个高深的问题,目测逼格极高,驾驭起来也肯定是有难度的,为了理解一篇文章中的一些概念,我也第一次鼓起勇气直面了这个问题,虽然是初出茅庐的小菜鸟,但也是有一番收获的,这篇文章粗浅的认识了观察者模式,将会以一个气象站的例子加以描述.
观察者模式
简要的描述
观察者模式,还有一个别名,叫做发布-订阅模式,相比于观察者模式这个名称来说,后者更具有表现力,观察者模式有两个主角,一个叫做Observer, 另一个叫做Subject.
下面给出一些比较官方的东西,观察者模式的组成
- 抽象目标角色 (Subject): 目标角色知道它的观察者,可以有任意多个观察者观察同一个目标。并且提供注册和删除观察者对象的接口。目标角色往往由抽象类或者接口来实现。
- 抽象观察者角色(Observer): 为那些在目标发生改变时需要获得通知的对象定义一个更新接口。抽象观察者角色主要由抽象类或者接口来实现。
- 具体目标角色(Concrete Subject): 将有关状态存入各个Concrete Observer对象。当它的状态发生改变时, 向它的各个观察者发出通知。
- 具体观察者角色(Concrete Observer): 存储有关状态,这些状态应与目标的状态保持一致。实现Observer的更新接口以使自身状态与目标的状态保持一致。在本角色内也可以维护一个指向Concrete Subject对象的引用。
不过概念总是抽象的, 死板的定义往往不能给出直观的感受, 在详细的解说之前, 我们还需要了解观察者模式到底要实现什么目的, 这样我们也可以进行有目的的学习.
For What ?
观察者模式往往会被用于满足这样的需求: 一个对象的状态发生变化, 其他对象也要随之作出变化.
观察者模式应该允许一个Concrete Subject有若干个Concrete Observer对其进行观察, 当Concrete Subject的状态发生改变时, 该模式可以通知所有该Concrete Subject的Concrete Observer,并且这些观察者会作出相应的改变, 而不是Concrete Subject的观察者对象不应该受到任何通知.
假设一个气象站管理了3个布告板和一个气象中心, 该模式可以实现在气象中心有新的气象信息时,3个布告板都能受到通知,并且可以以自己的方式展示这些信息.
该模式致力于降低对象之间的耦合性.
详细讲解
使用气象站例子
语言: c++
|
|
参考
博文: http://blog.csdn.net/harry_j/article/details/8435197
百度百科
其他相关博文




近期评论