每天一个设计模式: 观察者模式(Observer)
来源:互联网 发布:免费换ip软件 编辑:程序博客网 时间:2024/04/30 01:44
#ifndef SUBJECT_H#define SUBJECT_H#include <list>#include <string>using namespace std;typedef string State;class Observer;class Subject{public: virtual ~Subject(); virtual void Attach(Observer* obv); virtual void Detach(Observer* obv); virtual void Notify(); virtual void SetState(const State& st) = 0; virtual State GetState() = 0;protected: Subject();private: std::list<Observer*> *_obvs;};class ConcreteSubject:public Subject{public: ConcreteSubject(); ~ConcreteSubject(); State GetState(); void SetState(const State &st);protected:private: State _st;};#endif // SUBJECT_H
#include "subject.h"#include "observer.h"#include <iostream>using namespace std;Subject::Subject(){ this->_obvs = new list<Observer*>;}Subject::~Subject(){}void Subject::Attach(Observer *obv){ this->_obvs->push_front(obv);}void Subject::Detach(Observer *obv){ if(!obv) { this->_obvs->remove(obv); }}void Subject::Notify(){ list<Observer*>::iterator it; it = this->_obvs->begin(); for(; it != this->_obvs->end(); it++) { (*it)->Update(this); }}ConcreteSubject::ConcreteSubject(){ this->_st = '\0';}ConcreteSubject::~ConcreteSubject(){}State ConcreteSubject::GetState(){ return this->_st;}void ConcreteSubject::SetState(const State &st){ this->_st = st;}
</pre><pre code_snippet_id="1552113" snippet_file_name="blog_20160108_4_4904124" name="code" class="html">
#ifndef OBSERVER_H#define OBSERVER_H#include "subject.h"#include <string>using namespace std;typedef string State;class Observer{public: virtual ~Observer(); virtual void Update(Subject* sub) = 0; virtual void PrintInfo() = 0;protected: Observer(); State _st;private:};class ConcreteObserver: public Observer{public: virtual Subject* GetSubject(); ConcreteObserver(Subject* sub); virtual ~ConcreteObserver(); void Update(Subject *sub); void PrintInfo();protected:private: Subject* _sub;};#endif // OBSERVER_H
#include "observer.h"#include <iostream>Observer::Observer(){ this->_st = '\0';}Observer::~Observer(){}ConcreteObserver::ConcreteObserver(Subject* sub){ this->_sub = sub; this->_sub->Attach(this);}ConcreteObserver::~ConcreteObserver(){ this->_sub->Detach(this);}Subject* ConcreteObserver::GetSubject(){ return this->_sub;}void ConcreteObserver::PrintInfo(){ std::cout<<"ConcreteObserver state: " <<this->_st<<std::endl;}void ConcreteObserver::Update(Subject *sub){ this->_st = sub->GetState(); PrintInfo();}
#include <iostream>using namespace std;#include "subject.h"#include "observer.h"#include <iostream>#include <stdio.h>using namespace std;int main(){ ConcreteSubject* sub = new ConcreteSubject(); Observer* o1 = new ConcreteObserver(sub); Observer* o2 = new ConcreteObserver(sub); sub->SetState("old"); sub->Notify(); sub->SetState("new"); sub->Notify(); delete o1; delete o2; delete sub; getchar(); return 0;}
0 0
- 每天一个设计模式: 观察者模式(Observer)
- 设计模式--观察者(Observer)
- 设计模式-观察者(Observer)
- 观察者设计模式(Observer)
- Observer(观察者)设计模式
- 观察者设计模式Observer
- 观察者设计模式(observer)
- observer(观察者设计模式)
- Observer(观察者)设计模式
- 设计模式之Observer(观察者模式)
- 设计模式之Observer(观察者模式)
- 设计模式 (十五)观察者模式(Observer)
- 设计模式 (十五)观察者模式(Observer)
- 【设计模式】之观察者模式(Observer)
- 设计模式之--观察者模式(Observer)
- 设计模式(二)Observer - 观察者模式
- 设计模式之观察者(Observer)模式
- 设计模式之观察者(observer)模式
- 大数据系列第六课:Spark集群环境搭建
- 【Bash百宝箱】Android源码下载及编译
- 使用Queryable.Join实现多表连接查询
- 模板_网络流
- hdu1042——N!
- 每天一个设计模式: 观察者模式(Observer)
- 演化计算会议
- 比大小 OJ 73
- 关于c语言char*的问题
- 20150108-小失误-中国流-执黑胜
- 案例2产生随机数并运算的程序
- 进程和线程的简单介绍
- 使用vim删除内容
- Unity3D游戏开发者该如何有效利用其特性