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;
}
总结
观察者模式帮助我们定义了对象间的一对多依赖关系,使得对象之间的通信变得更加灵活和可扩展。
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!
