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.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shenmingik

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值