Design Patterns 19: Observer
阿新 • • 發佈:2018-12-15
定義物件之間一對多的依賴性,當其中一個狀態發生變化的時候,通知並更新所有的依賴物件。
#include <list> struct Subject; struct Observer { virtual void Update(Subject*) = 0; }; struct ConcreteSubject; struct ConcreteObserver : Observer { void Update(Subject* subject) override; private: int _observerState; }; struct Subject { void Attach(Observer* observer) { _observerList.push_back(observer); } void Detach(Observer* observer) { _observerList.remove(observer); } void Notify() { for (auto observer : _observerList) observer->Update(this); } virtual int GetState() = 0; virtual void SetState(int) = 0; private: std::list<Observer*> _observerList; }; struct ConcreteSubject : Subject { int GetState() override { return _subjectState; } void SetState(int state) override { _subjectState = state; } ConcreteSubject(int state) : _subjectState(state) {} ConcreteSubject() = default; private: int _subjectState; }; void ConcreteObserver::Update(Subject* subject) { _observerState = subject->GetState(); } int main() { ConcreteSubject subject; subject.Attach(new ConcreteObserver); subject.Attach(new ConcreteObserver); subject.Notify(); }