观察者模式

来源:互联网 发布:长得像女生知乎 编辑:程序博客网 时间:2024/06/05 08:56
#include <list>#include <iostream>#include <sstream>using namespace std;class Blog;class Observer;class BlogObserver;class Observer{protected:Blog * blog;public:Observer(Blog * b):blog(b){}virtual void update(){}};class Blog{private:string m_name;string m_content;list<Observer *> observer_list;public:Blog(string name, string content):m_name(name),m_content(content){}Blog(){}string toString(){ostringstream oss;oss << m_name << " " << m_content << endl;return oss.str();}void pubBlog(string name, string content){m_name = name;m_content = content;notify();}void setOnUpdateListener(Observer * ob){observer_list.push_back(ob);}void notify(){for(list<Observer*>::iterator iter = observer_list.begin();iter != observer_list.end(); iter++){(*iter)->update();}}};class BlogObserver : public Observer{public:BlogObserver(Blog * b):Observer(b){}virtual void update(){cout << "blog changed!" << endl;cout << blog->toString() ;}};int main(){Blog * blg = new Blog();Observer * obs = new BlogObserver(blg);blg->setOnUpdateListener(obs);blg->pubBlog("Tianbei", "Hello,world");}

0 0