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实现观察者模式