观察者模式

#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();
}

使用场景:当一个对象的改变需要同时改变其他对象的时候,而且不知道具体有多少对象有待改变时,应该考虑观察者模式。

当一个抽象模型有两个方面,其中一个方面依赖于另一个方面,这是用观察者模式,可以将这两者封装在独立的对象中,使它们各自独立的改变和复用。

原文地址:https://www.cnblogs.com/zendu/p/6398899.html