观察者模式
#include <iostream> #include <string> using namespace std; class Subject { private: vector<Observer> observers = new List<Observer>(); public : void Attach(Observer observer) { observers.push_back(observer); } void Detach(Observer observer) { for( ;; ) { observers.erase(observer); } } void Notufy() { for(Observer o in observers) { o.Update(); } } }; class ConcreteSubject : Subject { private: string subjectState; public: string Subjectstate { get set } }; class Observer { public: virtual void Update()=0; }; class ConcreteObserver:Observer { ConcreteSubject subject; public: void update() { cout<<" "<<subject.subjectState<<endl; } }; int main() { ConcreteSubject s = new ConcreteSubject(); s.Attach(new ConcreteObserver()); s.Attach(new ConcreteObserver()); s.Attach(new ConcreteObserver()); s.subjectState = "ABC"; s.Notufy(); }
使用场景:当一个对象的改变需要同时改变其他对象的时候,而且不知道具体有多少对象有待改变时,应该考虑观察者模式。
当一个抽象模型有两个方面,其中一个方面依赖于另一个方面,这是用观察者模式,可以将这两者封装在独立的对象中,使它们各自独立的改变和复用。
posted on 2017-02-14 18:33 zyz913614263 阅读(127) 评论(0) 编辑 收藏 举报