設計模式的c++實現之---觀察者模式
阿新 • • 發佈:2019-02-17
#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; }