十、观察者模式
来源:互联网 发布:winre 数据建模视频 编辑:程序博客网 时间:2024/05/29 09:08
观察者模式(Observer)定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主体对象。这个主题对象在状态发生变化时,会通知所有观察着对象,使他们能够自动更新自己。
//Subject.h#ifndef _SUBJECT_H_#define _SUBJECT_H_#include <list>#include <string>#include "Observer.h"class Subject{public:Subject();virtual ~Subject();virtual void Attach(Observer* observer);virtual void Detach(Observer* observer);virtual void Notify();virtual void SetState(const string& st)=0;virtual string GetState()=0;private:list<Observer*>* _obvs;};class ConcreteSubject:public Subject{public:ConcreteSubject();void SetState(const string& st);string GetState();private:string _st;};#endif
//Subject.cpp#include "Subject.h"#include <iostream>using namespace std;Subject::Subject(){_obvs = new list<Observer*>;}Subject::~Subject(){}void Subject::Attach(Observer* observer){_obvs->push_back(observer);}void Subject::Detach(Observer* observer){if (!observer){_obvs->remove(observer);}}void Subject::Notify(){list<Observer*>::iterator it;for (it=_obvs->begin();it!=_obvs->end();it++){(*it)->Update();}}ConcreteSubject::ConcreteSubject(){_st='\0';}void ConcreteSubject::SetState(const string& st){_st = st;}string ConcreteSubject::GetState(){return _st;}
//Observer.h#ifndef _OBSERVER_H_#define _OBSERVER_H_#include <string>using namespace std;class Subject;class Observer{public:Observer();virtual ~Observer();virtual void Update()=0;protected:string _st;};class ConcreteObserver1:public Observer{public:ConcreteObserver1(Subject* sub,string name);~ConcreteObserver1();Subject* GetSubject();void Update();protected:Subject* _sub;string _name;};class ConcreteObserver2:public Observer{public:ConcreteObserver2(Subject* sub,string name);~ConcreteObserver2();Subject* GetSubject();void Update();protected:Subject* _sub;string _name;};#endif
//Observer.cpp#include "Observer.h"#include "Subject.h"#include <iostream>using namespace std;Observer::Observer(){_st = '\0';}Observer::~Observer(){}ConcreteObserver1::ConcreteObserver1(Subject* sub,string name){_sub = sub;_name = name;_sub->Attach(this);}ConcreteObserver1::~ConcreteObserver1(){_sub->Detach(this);delete _sub;}Subject* ConcreteObserver1::GetSubject(){return _sub;}void ConcreteObserver1::Update(){_st = _sub->GetState();cout<<"this is observer "<<_name<<" my update state is: "<<_st<<endl;}ConcreteObserver2::ConcreteObserver2(Subject* sub,string name){_sub = sub;_name = name;_sub->Attach(this);}ConcreteObserver2::~ConcreteObserver2(){_sub->Detach(this);delete _sub;}Subject* ConcreteObserver2::GetSubject(){return _sub;}void ConcreteObserver2::Update(){_st = _sub->GetState();cout<<"this is observer "<<_name<<" my update state is: "<<_st<<endl;}
//main.cpp#include "Observer.h"#include "Subject.h"int main(){ConcreteSubject* pSub = new ConcreteSubject();ConcreteObserver1* obs1 = new ConcreteObserver1(pSub,"No1");ConcreteObserver2* obs2 = new ConcreteObserver2(pSub,"No2");pSub->SetState("old");pSub->Notify();pSub->SetState("new");pSub->Notify();return 0;}
- 十、观察者模式
- (十)观察者模式
- 设计模式C++实现十:观察者模式
- 设计模式之十:观察者模式(Observer)
- 设计模式(十)观察者模式
- 设计模式(二十) 观察者模式
- Java设计模式《十》观察者模式
- 设计模式—观察者模式(十)
- 设计模式(十):观察者模式
- 设计模式笔记(十) —— 观察者模式
- 设计模式之python版(十)--观察者模式
- Java设计模式之十(观察者模式)
- 设计模式实现(十)--- 观察者模式(Observer)
- <十>读<<大话设计模式>>之观察者模式
- 设计模式在游戏中的应用--观察者模式(十)
- Java学习笔记(十)观察者模式及适配器模式
- 设计模式笔记二十:观察者模式 |更新版
- 十、观察者模式——设计模式学习笔记
- WEB交互界面易用性设计和验收的指导性原则
- 检测C++中的内存泄漏
- opencv配置与在未安装opencv电脑上运行opencv程序
- web标准化设计:常用的CSS命名规则
- 【转载】EJB3.0实体Bean总结(EntityBean)
- 十、观察者模式
- 技术网站中的"运行代码“功能
- 无法对 数据库'UDS' 执行 删除,因为它正用于复制
- /proc文件系统简介
- 如何在Django模板中注入全局变量
- Servlet配置
- android:WindowTitle导致程序无法编译通过
- bzoj1084
- Subversion 错误信息一览表