- 4
- 0
- 约5.05千字
- 约 7页
- 2017-02-08 发布于重庆
- 举报
观察者模式
Observer观察者模式作用:观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己
UML图:
Subject类,可翻译为主题或抽象通知者,一般用一个抽象类或者一个借口实现。它把所有对观察者对象的引用保存在一个聚集里,每个主题都可以有任何数量的观察者。抽象主题提供一个借口,可以增加和删除观察者对象。
Observer类,抽象观察者,为所有的具体观察者定义一个借口,在得到主题的通知时更新自己。这个借口叫做更新接口。抽象观察者一般用一个抽象类或者一个接口实现。更新接口通常包含一个Update()方法。ConcreteSubject类,叫做具体主题或具体通知者,将有关状态存入具体通知者对象;在具体主题的内部状态改变时,给所有等级过的观察者发出通知。通常用一个具体子类实现。
ConcreteObserver类,具体观察者,实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题的状态相协调。具体观察者角色可以保存一个指向一个具体主题对象的引用。特点:将一个系统分割成一系列相互协作的类有一个很不好的副作用,那就是需要维护相关对象间的一致性。我们不希望为了维持一致性而使各类紧密耦合,这样会给维护、扩展和重用都带来不便。何时使用:当一个对象的改变需要同时改变其他对象的时候,而且它不知道具体有多少对象有待改变时,应该考虑使用观察者模式。观察者模式所做的工作其实就是在解除耦合。让耦合的双方都依赖于抽象,而不是依赖于具体。从而使得各自的变化都不会影响另一边的变化。
代码如下:
Observer.h
1 #ifndef _OBSERVER_H_
2 #define _OBSERVER_H_
3
4 #include string
5 #include list
6 using namespace std;
7
8 class Subject;
9
10 class Observer
11 {
12 public:
13 ~Observer();
14 virtual void Update(Subject*)=0;
15 protected:
16 Observer();
17 private:
18 };
19
20 class ConcreteObserverA : public Observer
21 {
22 public:
23 ConcreteObserverA();
24 ~ConcreteObserverA();
25 virtual void Update(Subject*);
26 protected:
27 private:
28 string m_state;
29 };
30
31 class ConcreteObserverB : public Observer
32 {
33 public:
34 ConcreteObserverB();
35 ~ConcreteObserverB();
36 virtual void Update(Subject*);
37 protected:
38 private:
39 string m_state;
40 };
41
42 class Subject
43 {
44 public:
45 ~Subject();
46 virtual void Notify();
47 virtual void Attach(Observer*);
48 virtual void Detach(Observer*);
49 virtual string GetState();
50 virtual void SetState(string state);
51 protected:
52 Subject();
53 private:
54 string m_state;
55 listObserver* m_lst;
56 };
57
58 class ConcreteSubjectA : public Subject
59 {
60 public:
61 ConcreteSubjectA();
62 ~ConcreteSubjectA();
63 protected:
64 private:
65 };
66
67 class ConcreteSubjectB : public Subject
68 {
69 public:
70 ConcreteSu
您可能关注的文档
- 蜀绣.doc
- 蜗牛与黄鹂鸟.doc
- 蜜蜂养殖技术篇之冬季.doc
- 融资租赁业务及售后回租介绍.doc
- 螺旋焊管在线管径测量系统的初步研制.doc
- 螺杆式压缩机.doc
- 螺杆空压机变频节能改造方案.doc
- 血常规化验单参考值.doc
- 血气分析中血乳酸检测之临床意义.doc
- 血液透析并发症应急预案.doc
- 广东省广州省实验中学教育集团2025-2026学年八年级上学期期中考试物理试题(解析版).docx
- 广东省广州大学附属中学2025-2026学年八年级上学期奥班期中物理试题(解析版).docx
- 广东省广州市第八十六中学2025-2026学年八年级上学期期中物理试题(含答案).docx
- 广东省广州市第八十九中学2025-2026学年八年级上学期期中考试物理试题(解析版).docx
- 广东省广州市第二中学2025-2026学年八年级上学期期中考试物理试题(含答案).docx
- 广东省广州市第八十六中学2025-2026学年八年级上学期期中物理试题(解析版).docx
- 广东省广州市第八十九中学2025-2026学年八年级上学期期中考试物理试题(含答案).docx
- 广东省广州市第二中学2025-2026学年八年级上学期期中考试物理试题(解析版).docx
- 2026《中国人寿上海分公司营销员培训体系优化研究》18000字.docx
- 《生物探究性实验教学》中小学教师资格模拟试题.docx
最近下载
- 西师版五年级数学下册全套电子教案(表格式)(最全).doc VIP
- 2025年AWS认证CloudFront与Route53延迟_地理路由缓存行为专题试卷及解析.pdf VIP
- 2025年互联网营销师元宇宙互动剧本杀与沉浸式剧情营销专题试卷及解析.pdf VIP
- 2025年房地产经纪人投资回报率与投资回报率自动化分析专题试卷及解析.pdf VIP
- 2025年无人机驾驶员执照国际民航组织(ICAO)标准专题试卷及解析.pdf VIP
- 井下中央变电所高压开关整定计算说明书.pdf
- 2025年房地产经纪人商品房交付条件与标准专题试卷及解析.pdf VIP
- 异位妊娠护理教学查房【40页】.pptx VIP
- PLC-S7-200-SMART-与LabVIEW-OPC-以太网通信.pdf VIP
- 全球百强创新集群排行榜.pdf VIP
原创力文档

文档评论(0)