观察者模式

2018-05-22  本文已影响0人  小蜗牛Snail丶

观察者模式的定义:

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

大白话:

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

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 

上一篇 下一篇

猜你喜欢

热点阅读