ObserverPattern.cpp 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #include "ObserverPattern.h"
  2. void AbstractNewsAgency::addObserver(AbstractObserver* observer)
  3. {
  4. m_listObservers.push_back(observer);
  5. }
  6. void AbstractNewsAgency::removeObserver(AbstractObserver* observer)
  7. {
  8. m_listObservers.remove(observer);
  9. }
  10. void MorgensNewsAgency::notifyObservers(std::string news)
  11. {
  12. SPDLOG_INFO("摩根斯新闻社报纸的订阅者一共有: {} 位", m_listObservers.size());
  13. for (auto observer : m_listObservers)
  14. {
  15. observer->update(news);
  16. }
  17. }
  18. void GossipNewsAgency::notifyObservers(std::string news)
  19. {
  20. SPDLOG_INFO("八卦新闻社报纸的订阅者一共有: {} 位", m_listObservers.size());
  21. for (auto observer : m_listObservers)
  22. {
  23. observer->update(news);
  24. }
  25. }
  26. void testObserverPattern()
  27. {
  28. /* 创建新闻社 */
  29. MorgensNewsAgency* morgensAgency = new MorgensNewsAgency();
  30. GossipNewsAgency* gossipAgency = new GossipNewsAgency();
  31. /* 创建订阅者 */
  32. AbstractObserver* observerA = new Dragon("蒙奇·D·龙", morgensAgency);
  33. AbstractObserver* observerB = new Shanks("香克斯", morgensAgency);
  34. AbstractObserver* observerC = new Bartolomeo("巴托洛米奥", gossipAgency);
  35. /* 发布新闻 */
  36. morgensAgency->notifyObservers("蒙奇·D·路飞成为新世界的新的四皇之一, 赏金30亿贝里!!!");
  37. SPDLOG_INFO("=========================================");
  38. gossipAgency->notifyObservers("女帝汉库克想要嫁给路飞, 给路飞生猴子, 哈哈哈...");
  39. delete observerA;
  40. delete observerB;
  41. delete observerC;
  42. delete morgensAgency;
  43. delete gossipAgency;
  44. }