【设计模式】观察者模式了解吗?可以大致说说不?试试实现?(约190字)

观察者模式

定义对象间的一种一对多(变化)的依赖关系,以便当一个对象(Subject)的状态发生改变时,所有依赖于它的对象都得到通知并自动更新

要求:

  • 独立地改变目标与观察者,从而使二者之间的关系松耦合
  • 观察者自己决定是否订阅通知,目标对象并不关注谁订阅了
  • 观察者不要依赖通知顺序,目标对象也不知道通知顺序

背景

气象站发布气象资料给数据中心,数据中心经过处理,将气象信息更新到两个不同的显示终端(A 和B);

上层:气象站

下层:显示中断

依赖:数据中心

C++

#include 
#include 
using namespace std;

class IDisplay {
public:
    virtual void show(float temperature) = 0;
    virtual ~IDisplay() = default;
};

class IDisplayA : public IDisplay {
public:
    virtual void show(float temperature);
};

class IDisplayB : public IDisplay {
public:
    virtual void show(float temperature);
};

class WeatherData {
};

class DataCenter {
public:
    void Attach(IDisplay *ob);
    void Detach(IDisplay *ob);
    void Notify() {
        float temper = CalcTemperature();
        for (auto iter = obs.begin(); iter != obs.end(); iter++) {
            (*iter)->show(temper);
        }

    }
private:
    virtual WeatherData* GetWeatherData();

    virtual float CalcTemperature() {
        WeatherData *data = GetWeatherData();
        float temper;
        return temper;
    }

    vector obs;
};

int main() {
    DataCenter *center = new DataCenter;
    IDisplay *da = new IDisplayA;
    IDisplay *db = new IDisplayB;
    center->Attach(da);
    center->Attach(db);
    center->Notify();
}

THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容