例:在一个部队中(一个项目),将军的职责是发号施令,士兵的职责是根据命令去执行不同的任务;
注意:在这里,将军是被观察者(A),士兵是观察者(B);
A是唯一的,B可以是任意个;
所谓观察,其实是A主动将信息传递给B;
举例分析:
- 假设此时有A,B俩个类;
- 在A类中实例一个B类的成员,作为A类的成员变量;
- 此时,在A类的函数中就可以使用B类的对象,来调用B的函数;
- 如果B的函数带参数,而此时该参数是由A类处理得到后,作为参数传递给B。那么,此时B得到A的信息,进行处理就是一对一的观察者模式;
总结:此例中,A是被观察者
B是观察者
B函数的参数就是观察到的信息
一对一实现了,一对多如何实现?
答:在A类中实例更多的B类对象,C类对象,D类。。。对象;
实例化对象太多,不好看,咋办?
答:将对象分类,用容器放置,如vector<B*>;
或者,(初步可以不考虑这个)所有的观察者类继承同一个观察者基类,然后用多态来处理
理解误区:刚开始以为,观察者模式是监督的意思,就是一个人监督一群人,当其中某个人有变化时,监督者要作出对应的回馈反应。但貌似将主动,被动的关系弄反了;到底谁观察谁,谁是主动,谁是被动,搞清楚了这个问题,观察者模式就好理解了;
项目中用法:一个管理类(初步筛选),根据不同的信息将其分发给不同的类进行处理(最终处理);
实例化具体代码请百度