C++设计模式之观察者模式

//观察者模式
class Observer{
public:
    virtual void Updata() = 0;
};
class Subject{
public:
    void Attach(Observer* in){ m_list.push_back(in); }
    void Detach(Observer* out){ m_list.remove(out); }
    void Notify(){
        for (auto it = m_list.begin(); it != m_list.end(); it++){
            (*it)->Updata();
        }
    }
private:
    list<Observer*> m_list;
};
class ConcreteSubject :public Subject{
public:
    string SubjectState;
};
class ConcreteObserver:public Observer{
public:
    ConcreteObserver(ConcreteSubject *subject){
        m_subject = subject;
    }
    void Updata(){
        ObserverState = m_subject->SubjectState;
        cout << ObserverState << endl;
    }
private:
    ConcreteSubject *m_subject;
    string ObserverState;
};
int main(){
    ConcreteSubject *s = new ConcreteSubject();
    s->Attach(new ConcreteObserver(s));
    s->Attach(new ConcreteObserver(s));
    s->Attach(new ConcreteObserver(s));
    s->SubjectState = "ABC";
    s->Notify();
    return 0;
}

posted @ 2018-10-01 16:26  aote369  阅读(144)  评论(0编辑  收藏  举报