#include <iostream>
#include <vector>
#include <sstream>
#include <algorithm>
#include <list>
using namespace std;
class Observer
{
public:
Observer(){}
virtual ~Observer(){}
virtual void Update(){}
};
class Blog
{
public:
Blog(){}
virtual ~Blog(){}
void Attach(Observer *observer)
{
m_observers.push_back(observer);
}
void Remove(Observer *observer)
{
m_observers.remove(observer);
}
void Notify()
{
for(auto it=m_observers.begin();it!=m_observers.end();++it)
{
(*it)->Update();
}
}
virtual void SetStatus(string s)
{
m_status=s;
}
virtual string GetStatus()
{
return m_status;
}
private:
list<Observer*>m_observers;
protected:
string m_status;
};
class BlogCSDN:public Blog
{
private:
string m_name;
public:
BlogCSDN(string name):m_name(name){}
~BlogCSDN(){}
void SetStatus(string s)
{
m_status="CSDN通知:"+m_name+s;
}
string GetString()
{
return m_status;
}
};
class ObserverBlog:public Observer
{
private:
string m_name;
Blog *m_blog;
public:
ObserverBlog(string name,Blog *blog):m_name(name),m_blog(blog){}
~ObserverBlog(){}
void Update()
{
string status=m_blog->GetStatus();
cout<<m_name<<"---------"<<status<<endl;
}
};
int main()
{
Blog *blog=new BlogCSDN("darmao");
Observer *observer1=new ObserverBlog("tutupig",blog);
blog->Attach(observer1);
blog->SetStatus("发表了设计模式");
blog->Notify();
delete blog;
delete observer1;
return 0;
}