C#设计模式(17)——观察者模式(ObserverPattern)
一、引言
在现实生活中,处处可见观察者模式,例如,微信中的订阅号,订阅博客和QQ微博中关注好友,这
些都属于观察者模式的应用。在这一章将分享我对观察者模式的理解,废话不多说了,直接进入今天的主
题。
二、观察者模式的介绍
2.1观察者模式的定义
从生活中的例子可以看出,只要对订阅号进行关注的客户端,如果订阅号有什么更新,就会直接推送
给订阅了的用户。从中,我们就可以得出观察者模式的定义。
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对
象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己的行为。
2.2观察者模式的结构
从上面观察者模式的定义和生活中的例子,很容易知道,观察者模式中首先会存在两个对象,一个是
观察者对象,另一个就是主题对象,然而,根据面向接口编程的原则,则自然就有抽象主题角色和抽象观
察者角色。理清楚了观察者模式中涉及的角色后,接下来就要理清他们之间的关联了,要想主题对象状态
发生改变时,能通知到所有观察者角色,则自然主题角色必须所有观察者的引用,这样才能在自己状态改
变时,通知到所有观察者。有了上面的分析,下面观察者的结构图也就很容易理解了。具体结构图如下所
示:
图观察者模式结构图
可以看出,在观察者模式的结构图有以下角色:
抽象主题角色(Subject):抽象主题把所有观察者对象的引用保存在一个列表中,并提供增
加和删除观察者对象的操作,抽象主题角色又叫做抽象被观察者角色,一般由抽象类或接口实现。
抽象观察者角色(Observer):为所有具体观察者定义一个接口,在得到主题通知时更新自
己,一般由抽象类或接口实现。
具体主题角色(ConcreteSubject):实现抽象主题接口,具体主题角色又叫做具体被观察者
角色。
具体观察者角色(ConcreteObserver):实现抽象观察者角色所要求的接口,以便使自身状
态与主题的状态相协调。
评论0
最新资源