life is in dream..........
我的 https://blog.csdn.net/qq_35865125/article/details/88322729 这篇文章中使用c++自己实现了这种模式,但是这种模式有一个很大的缺点,发布者类和订阅者类是紧密耦合在一起的,因为在发布者的发布函数中需要调用订阅者的函数。因此,两者不是独立的。
https://www.cnblogs.com/itjeff/p/7095398.html 这篇blog的前半部分对这种模式的缺点有介绍。对于这个缺点,《大话设计模式》中的相应章节也提到了,并以c#语言为例子,给出了使用委托delegate的方式来解决这个问题的方法。
c#提供了delegate,从而可以方便地实现没有耦合的观察者订阅者模式。但是C++语言没有提供类似的东西,用C++的话,可以用以下方法:
- 直接使用boost库中的signals2 -- https://blog.csdn.net/qq_35865125/article/details/89343429 ,可参照《Boost程序库完全开发指南》 罗剑锋,第四版
- 自己实现(我还没有探究)
- 使用qt的信号槽机制
Ref:
《大话设计模式》
Releated Link:
Boost bind的使用方法: https://my.oschina.net/hevakelcj/blog/114440
用c++实现委托的一个深度方法: https://www.cnblogs.com/cappuccino/p/3262056.html
boost.signal实现多播委托: https://www.xuebuyuan.com/1789320.html
线程安全的观察者模式 boost signal2: https://blog.csdn.net/szqsdq/article/details/71945256