欢迎来到天天文库
浏览记录
ID:40313367
大小:23.94 KB
页数:14页
时间:2019-07-30
《设计模式C++-观察者模式》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、观察者模式,又叫做发布-订阅(Publish/Subscribe)模式观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使得它们能够自动更新自己。观察者模式的动机将一个系统分割成一系列相互协作的类有一个很不好的副作用,那就是需要维护相关对象间的一致性。我们不希望为了维护一致性而使各类紧密耦合,这样会给维护、扩展和重用都带来不方便。而观察者模式的关键对象是主题Subject和观察者Observer,一个Subject可以有任意数目的依赖它的Observer,一旦Subject的
2、状态发生了改变,所有的Observer都可以得到通知。Subject发出通知时并不需要知道谁是它的观察者,也就是说,具体观察者是谁,它根本不需要知道。而任何一个具体观察者不知道也不需要知道其他观察者的存在。什么时候应该使用观察者模式当一个对象的改变需要同时改变其他对象的时候。而且它不知道具体有多少对象有待改变时,应该考虑使用观察者模式。也可以理解为,当一个抽象模型有两个方面,其中一方面依赖于另一方面,这时用观察者模式可以将这两者封装在独立的对象中使它们各自独立地改变和复用。总的来说,观察者模式所做的工作其实就是在解除耦合。让耦合的双方都依赖于抽象,而不是
3、依赖于具体。从而使得各自的变化都不会影响另一边的变化。工程结构(1)抽象通知者Subject.h(2)抽象观察者Observer.h(3)具体通知者ConcreteSubject.h(4)具体观察者ConcreteObserver.h(5)客户端类ObserverApp.cpp(1)抽象通知者Subject.hviewplaincopytoclipboardprint?/*************************************************************************description:主题或者抽象通知
4、者类,一般用一个抽象类或者一个接口实现。它把所有对观察者对象的引用保存在一个聚集里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加或者删除观察者对象。*remark:************************************************************************/#ifndef_SUBJECT_H_#define_SUBJECT_H_#include"Observer.h"#include#include#includeusingnamesp
5、acestd;classCSubject{public://增加观察者virtualvoidAttach(CObserver*pObserver)=0;//移除观察者virtualvoidDetach(CObserver*pObserver)=0;//通知virtualvoidNotify(void)=0;};#endif_SUBJECT_H_/*************************************************************************description:主题或者抽象通知者类,一般用一个抽象类或者
6、一个接口实现。它把所有对观察者对象的引用保存在一个聚集里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加或者删除观察者对象。*remark:************************************************************************/#ifndef_SUBJECT_H_#define_SUBJECT_H_#include"Observer.h"#include#include#includeusingnamespacestd;classC
7、Subject{public://增加观察者virtualvoidAttach(CObserver*pObserver)=0;//移除观察者virtualvoidDetach(CObserver*pObserver)=0;//通知virtualvoidNotify(void)=0;};#endif_SUBJECT_H_(2)抽象观察者Observer.hviewplaincopytoclipboardprint?/***********************************************************************
8、**description:抽象观察者类,为所有的具体观察者定义一个接口,在得到
此文档下载收益归作者所有