美文网首页
观察者模式

观察者模式

作者: 小蜗牛Snail丶 | 来源:发表于2018-05-22 12:22 被阅读0次

    观察者模式的定义:

      在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。

    大白话:

      其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息。

    2、这个模式的结构图

    3、可以看到,该模式包含四个角色

    抽象被观察者角色:也就是一个抽象主题,它把所有对观察者对象的引用保存在一个集合中,每个主题都可以有任意数量的观察者。抽象主题提供一个接口,可以增加和删除观察者角色。一般用一个抽象类和接口来实现。

    抽象观察者角色:为所有的具体观察者定义一个接口,在得到主题通知时更新自己。

    具体被观察者角色:也就是一个具体的主题,在集体主题的内部状态改变时,所有登记过的观察者发出通知。

    具体观察者角色:实现抽象观察者角色所需要的更新接口,一边使本身的状态与制图的状态相协调。

    4、使用场景例子

      有一个微信公众号服务,不定时发布一些消息,关注公众号就可以收到推送消息,取消关注就收不到推送消息。

    c++ 

    抽象被观察者 主题类:

    .h:

    #include "Observe.h"

    #ifndef BEIOBSERVE_H_

    #define BEIOBSERVE_H_

    class observerable{

    public:

    virtual void registerObserve(Observe o){};

    virtual void removeObserve(Observe o){};

    virtual void notifyObserve(){};

    };

    #endif /* BEIOBSERVE_H_ */

    抽象观察者:

    .h 

    #include#includeusing namespace std;

    #ifndef OBSERVE_H_

    #define OBSERVE_H_

    class Observe {

    public:

    void update(string messages);

    };

    #endif /* OBSERVE_H_ */


    具体被观察者 :


    .cpp:

    具体观察者 

    .h 

    #ifndef USER_H_#

    define USER_H_#

    include "Observe.h"#

    include

    using namespace std;

    class user : public Observe

    {

    private:

    string name;

    string message;

    public:

    user(string name);

    ~user();

    void update(string message);

    void read();

    };

    #endif /* USER_H_ */

    .cpp 

    相关文章

      网友评论

          本文标题:观察者模式

          本文链接:https://www.haomeiwen.com/subject/phehjftx.html