设计模式---观察者模式

xiaoxiao2021-02-28  87

观察者模式

又叫发布-订阅模式 定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察,使它们能够自动更新自己。

#include<iostream>

#include<list> using namespace std; class Observer {     public:         virtual void Update(){} }; class Subject {     private:         list<Observer*> m_observers;     protected:         string m_status;          public:         void Attach(Observer *observer)         {             m_observers.push_back(observer);         }         void Remove(Observer *observer)         {             m_observers.remove(observer);         }         void Notify()         {             list<Observer*>::iterator iter = m_observers.begin();             for(;iter != m_observers.end();iter++)             {                 (*iter)->Update();             }         }         virtual void SetStatus(string s){}         virtual string GetStatus(){} }; class ConcreteSubject:public Subject {     public:         void SetStatus(string s){m_status = s;}         string GetStatus(){return m_status;} }; class ConcreteObserver:public Observer {     private:         string m_name;         Subject *m_subject;     public:         ConcreteObserver(string name,Subject *sub):m_name(name),m_subject(sub){}          void Update()     {         string status = m_subject->GetStatus();         cout<<m_name<<" -----"<<status<<endl;     } }; int main() {     ConcreteSubject *s = new ConcreteSubject();     s->SetStatus("123");     s->Attach(new ConcreteObserver("aa",s));     s->Attach(new ConcreteObserver("bb",s));     s->Attach(new ConcreteObserver("cc",s));     s->Notify();     return 0; }
转载请注明原文地址: https://www.6miu.com/read-45822.html

最新回复(0)