#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");
}
观察者模式
最新推荐文章于 2025-03-11 10:43:25 发布