观察者模式

Posted 怎度网

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了观察者模式相关的知识,希望对你有一定的参考价值。

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

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

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

以上是关于观察者模式的主要内容,如果未能解决你的问题,请参考以下文章

未调用 LiveData 观察者

Java设计模式补充:回调模式事件监听器模式观察者模式(转)

如何为片段设置观察者

永远观察实时数据的片段

设计模式观察者模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

观察者模式