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