#include "ObserverPattern.h" void AbstractNewsAgency::addObserver(AbstractObserver* observer) { m_listObservers.push_back(observer); } void AbstractNewsAgency::removeObserver(AbstractObserver* observer) { m_listObservers.remove(observer); } void MorgensNewsAgency::notifyObservers(std::string news) { SPDLOG_INFO("摩根斯新闻社报纸的订阅者一共有: {} 位", m_listObservers.size()); for (auto observer : m_listObservers) { observer->update(news); } } void GossipNewsAgency::notifyObservers(std::string news) { SPDLOG_INFO("八卦新闻社报纸的订阅者一共有: {} 位", m_listObservers.size()); for (auto observer : m_listObservers) { observer->update(news); } } void testObserverPattern() { /* 创建新闻社 */ MorgensNewsAgency* morgensAgency = new MorgensNewsAgency(); GossipNewsAgency* gossipAgency = new GossipNewsAgency(); /* 创建订阅者 */ AbstractObserver* observerA = new Dragon("蒙奇·D·龙", morgensAgency); AbstractObserver* observerB = new Shanks("香克斯", morgensAgency); AbstractObserver* observerC = new Bartolomeo("巴托洛米奥", gossipAgency); /* 发布新闻 */ morgensAgency->notifyObservers("蒙奇·D·路飞成为新世界的新的四皇之一, 赏金30亿贝里!!!"); SPDLOG_INFO("========================================="); gossipAgency->notifyObservers("女帝汉库克想要嫁给路飞, 给路飞生猴子, 哈哈哈..."); delete observerA; delete observerB; delete observerC; delete morgensAgency; delete gossipAgency; }