c_cpp ObServer实现
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp ObServer实现相关的知识,希望对你有一定的参考价值。
#include <map>
#include <vector>
class IObserver
{
public:
virtual ~IObserver() {}
virtual void Update(int message) = 0;
};
class ISubject
{
public:
ISubject();
virtual ~ISubject();
virtual void Subscribe(int message, IObserver *observer);
virtual void Unsubscribe(int message, IObserver *observer);
virtual void Notify(int message);
private:
typedef std::vector<IObserver *> ObserverList;
typedef std::map<int, ObserverList> ObserverMap;
ObserverMap mObservers;
};
#include "observer.h"
class MySubject : public ISubject
{
public:
enum Message {ADD, REMOVE};
}
#include "subject.h"
#include <iostream>
class MyObserver : public IObserver
{
public:
explicit MyObserver(const std::string &str) :
mName(str)
{}
void Update(int message)
{
std::cout << mName << " Received message ";
std::cout << message << std::endl;
}
private:
std::string mName;
};
int main(int, char **)
{
MyObserver observer1("observer1");
MyObserver observer2("observer2");
MyObserver observer3("observer3");
MySubject subject;
subject.Subscribe(MySubject::ADD, &observer1);
subject.Subscribe(MySubject::ADD, &observer2);
subject.Subscribe(MySubject::REMOVE, &observer2);
subject.Subscribe(MySubject::REMOVE, &observer3);
subject.Notify(MySubject::ADD);
subject.Notify(MySubject::REMOVE);
return 0;
}
以上是关于c_cpp ObServer实现的主要内容,如果未能解决你的问题,请参考以下文章
Java中使用Observer接口和Observable类实践Observer观察者模式
20-观察者(Observer)模式Ruby实现
用Delphi实现观察者模式(Observer模式)
Vue双向绑定的实现原理系列:监听器Observer和订阅者Watcher
JDK自带的Observable和Observer实现观察者模式
Observer,Observable实现观察者模式