大话设计模式学习(十一)——观察者模式
2010-08-03 22:31
441 查看
观察者模式又叫发布—订阅模式。它定义了一种一对多的依赖关系,让多个观察着对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有的观察者对象,使他们能够自动更新自己
Subject类,可以翻译为主体或者抽象主题,一般用一个抽象类或者一个接口实现
observer类,抽象观察者。包含一个Update()的更新方法
ConcreteSubject类,具体主题或者具体通知者
concreteObserver类,具体观察者
客户端代码:
输出:
观察者X的新状态是ABC
观察者Y的新状态是ABC
当一个对象的改变需要通知其他对象,而且它不知道具体有多少对象有待改变时,应该考虑使用观察者模式。观察者模式所做的工作其实就是在解除耦合,让耦合的双方都依赖于抽象,而不是依赖于具体,从而使得各自的变化都不会影响另一边的变化。
Subject类,可以翻译为主体或者抽象主题,一般用一个抽象类或者一个接口实现
class Subject { public: //增加观察者 void Attach(Observer* observer) { observers.push_back(observer); } //移除观察者 void Detach(Observer* observer) { for (vector<Observer *>::iterator iter=observers.begin();iter!=observers.end();iter++) { } } //通知 void Notify() { for (vector<Observer *>::iterator iter=observers.begin();iter!=observers.end();iter++) { } } private: vector<Observer *> observers; };
observer类,抽象观察者。包含一个Update()的更新方法
class Observer { public: virtual void Update()=0; };
ConcreteSubject类,具体主题或者具体通知者
class ConcreteSubject : public Subject { public: //被观察着状态 CString SubjectState; };
concreteObserver类,具体观察者
class ConcreteObserver : public Observer { public: ConcreteObserver(ConcreteSubject* pSubject,CString strName) { this->m_pSubject=pSubject; this->m_strName=strName; } CString m_strObserverState; CString m_strName; void Update() { m_strObserverState=m_pSubject->SubjectState; CString strInfo; strInfo.Format(_T("观察者{%s}的新状态是{%s}"),m_strName,m_strObserverState); cout<<strInfo<<endl; } private: ConcreteSubject *m_pSubject; };
客户端代码:
void main() { ConcreteSubject* s=new ConcreteSubject; ConcreteObserver* pObserver1=new ConcreteObserver(s,_T("X")); ConcreteObserver* pObserver2=new ConcreteObserver(s,_T("Y")); s->Attach(pObserver1); s->Attach(pObserver2); s->SubjectState=_T("ABC"); s->Notify(); }
输出:
观察者X的新状态是ABC
观察者Y的新状态是ABC
当一个对象的改变需要通知其他对象,而且它不知道具体有多少对象有待改变时,应该考虑使用观察者模式。观察者模式所做的工作其实就是在解除耦合,让耦合的双方都依赖于抽象,而不是依赖于具体,从而使得各自的变化都不会影响另一边的变化。
相关文章推荐
- 设计模式学习笔记十一:观察者模式
- 读前辈的大话设计模式(十一)之观察者模式,抒自己的读后感
- 设计模式学习笔记十一:观察者模式
- 大话设计模式之观察者模式--学习笔记
- 大话设计模式之观察者模式--学习笔记
- 大话设计模式-观察者模式学习总结
- 设计模式学习笔记-观察者模式
- 大话设计模式-装饰模式学习总结
- 设计模式学习--观察者模式
- 十一、行为型模式之模板方法、职责链、策略-----《大话设计模式》
- 浅谈Android设计模式学习之观察者模式
- 设计模式学习--------2.观察者模式
- 设计模式学习笔记-观察者模式
- 设计模式学习日志之十一:责任连模式(原文转载)
- 设计模式学习(十三)————观察者模式
- JavaScript学习记录——《学用 JavaScript 设计模式》学习笔记(3)观察者模式
- 大话设计模式C++版——观察者模式
- 设计模式学习3 观察者模式
- 观察者模式 -- 大话设计模式
- 11. JAVA常用类库 Part 4 (对象克隆技术clone、Arrays类、Comparable接口、比较器Comparator、观察者设计模式) ----- 学习笔记