观察者模式

这种设计模式,一般有多个待观察对象和一个观察者,待观察者对象通过告诉观察者自己感兴趣的事件,观察者把待观察者以及其感兴趣的事件存储起来(可以用unordered_map),观察者观察到此事件就会告诉待观察者。

这有点像Redis中间件和回调函数的机制。

enum Obj_type
{
   
	OBJECT1 = 1,
	OBJECT2,
	OBJECT3,
};

class Base 
{
   
public:
	virtual void func() {
   }
};

class Object1 :public Base
{
   
public:
	void func()
	{
   
		cout << "i am object1" << endl;
	}
};

class Object2 :public Base
{
   
public:
	void func()
	{
   
		cout << "i am object2" << endl;
	}
};

class Object3 :public Base
{
   
public:
	void func()
	{
   
		cout << "i am object3" << endl;
	}
};

class Observe
{
   
public:
	void reg_message(int msgid, Base& obj)
	{
   
		obj_map_[msgid] = &obj;
	}

	void message_append(int msgid)
	{
   
		auto it = obj_map_.find(msgid);
		it->second->func();
	}

private:
	unordered_map<int,Base*> obj_map_;
};

int main()
{
   
	Object1 obj1;
	Object2 obj2;
	Object3 obj3;

	Observe observe;
	observe.reg_message(OBJECT1, obj1);
	observe.reg_message(OBJECT2, obj2);
	observe.reg_message(OBJECT3, obj3);

	observe.message_append(OBJECT1);
}

参考文献

[1] 施磊.C++高级.图论科技.2020.7.