C++设计模式——观察者模式

观察者模式

这种设计模式,一般有多个待观察对象和一个观察者,待观察者对象通过告诉观察者自己感兴趣的事件,观察者把待观察者以及其感兴趣的事件存储起来(可以用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.
全部评论

相关推荐

小浪_Coding:找硬件测试,也可兼顾软测欧, 简历还可以的 ,注意排版,项目写的有条理一点, 然后个人技能多加点, 润色好简历之后就开始沟通海投了,深圳,东莞这边做硬件相关的公司还不少, 医疗类,仪器类的都可以尝试
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 11:21
被夸真的超级开心,好可爱的姐姐
码农索隆:老色批们不用脑补了,我把金智妮的图找来了查看图片
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务