C++中的观察者模式
目录
(图片来源网络,侵删)
观察者模式(Observer Pattern)
实际应用
股票价格监控系统
发布-订阅系统
总结
观察者模式(Observer Pattern)
观察者模式是一种行为型设计模式,它定义了对象间的一对多依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。观察者模式主要包含以下角色:
1. Subject(主题):保存对观察者的引用,并提供注册和注销观察者的方法。
2. Observer(观察者):定义一个更新接口,用于接收主题的通知。
3. ConcreteSubject(具体主题):具体实现主题,维护其状态并在状态改变时通知观察者。
4. ConcreteObserver(具体观察者):具体实现观察者,响应主题的通知并进行相应的更新。
实际应用
股票价格监控系统
-- 实现一个股票价格监控系统,当股票价格发生变化时,所有注册的观察者(例如投资者)都会收到通知。
#include #include #include #include // 观察者接口 class Observer { public: virtual void update(const std::string& stockName, float price) = 0; }; // 主题接口 class Subject { public: virtual void registerObserver(std::shared_ptr observer) = 0; virtual void removeObserver(std::shared_ptr observer) = 0; virtual void notifyObservers() = 0; }; // 具体主题 class Stock : public Subject { private: std::string name; float price; std::vector observers; public: Stock(const std::string& name, float price) : name(name), price(price) {} void setPrice(float newPrice) { price = newPrice; notifyObservers(); } float getPrice() const { return price; } void registerObserver(std::shared_ptr observer) override { observers.push_back(observer); } void removeObserver(std::shared_ptr observer) override { observers.erase(std::remove(observers.begin(), observers.end(), observer), observers.end()); } void notifyObservers() override { for (auto& observer : observers) { observer->update(name, price); } } }; // 具体观察者 class Investor : public Observer { private: std::string name; public: Investor(const std::string& name) : name(name) {} void update(const std::string& stockName, float price) override { std::cout update(latestNews); } } }; // 具体观察者 class ConcreteSubscriber : public Subscriber { private: std::string name; public: ConcreteSubscriber(const std::string& name) : name(name) {} void update(const std::string& message) override { std::cout removeSubscriber(subscriber1); publisher->publishNews("Exclusive: Observer Pattern Simplified!"); return 0; }
总结
观察者模式帮助我们定义了对象间的一对多依赖关系,使得对象之间的通信变得更加灵活和可扩展。
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。