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