旅游包车网站最新模板东莞常平医院网站建设
news/
2025/10/7 16:40:35/
文章来源:
旅游包车网站最新模板,东莞常平医院网站建设,网页作品集,wordpress如何去掉amp目录
观察者模式#xff08;Observer Pattern#xff09;
实际应用
股票价格监控系统
发布-订阅系统
总结 观察者模式#xff08;Observer Pattern#xff09;
观察者模式是一种行为型设计模式#xff0c;它定义了对象间的一对多依赖关系。当一个对象的状态发生改变…目录
观察者模式Observer Pattern
实际应用
股票价格监控系统
发布-订阅系统
总结 观察者模式Observer Pattern
观察者模式是一种行为型设计模式它定义了对象间的一对多依赖关系。当一个对象的状态发生改变时所有依赖于它的对象都会得到通知并自动更新。观察者模式主要包含以下角色 1. Subject主题保存对观察者的引用并提供注册和注销观察者的方法。 2. Observer观察者定义一个更新接口用于接收主题的通知。 3. ConcreteSubject具体主题具体实现主题维护其状态并在状态改变时通知观察者。 4. ConcreteObserver具体观察者具体实现观察者响应主题的通知并进行相应的更新。
实际应用
股票价格监控系统
-- 实现一个股票价格监控系统当股票价格发生变化时所有注册的观察者例如投资者都会收到通知。
#include iostream
#include vector
#include string
#include memory// 观察者接口
class Observer {
public:virtual void update(const std::string stockName, float price) 0;
};// 主题接口
class Subject {
public:virtual void registerObserver(std::shared_ptrObserver observer) 0;virtual void removeObserver(std::shared_ptrObserver observer) 0;virtual void notifyObservers() 0;
};// 具体主题
class Stock : public Subject {
private:std::string name;float price;std::vectorstd::shared_ptrObserver 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_ptrObserver observer) override {observers.push_back(observer);}void removeObserver(std::shared_ptrObserver 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 Investor name is notified that stockName price changed to price std::endl;}
};// 客户端代码
int main() {auto stock std::make_sharedStock(AAPL, 150.0);auto investor1 std::make_sharedInvestor(Alice);auto investor2 std::make_sharedInvestor(Bob);stock-registerObserver(investor1);stock-registerObserver(investor2);stock-setPrice(155.0);stock-setPrice(160.0);stock-removeObserver(investor1);stock-setPrice(165.0);return 0;
}发布-订阅系统
-- 实现一个简单的发布-订阅系统当发布者发布新消息时所有订阅者都会收到通知。
#include iostream
#include vector
#include string
#include memory// 观察者接口
class Subscriber {
public:virtual void update(const std::string message) 0;
};// 主题接口
class Publisher {
public:virtual void registerSubscriber(std::shared_ptrSubscriber subscriber) 0;virtual void removeSubscriber(std::shared_ptrSubscriber subscriber) 0;virtual void notifySubscribers() 0;
};// 具体主题
class NewsPublisher : public Publisher {
private:std::string latestNews;std::vectorstd::shared_ptrSubscriber subscribers;public:void publishNews(const std::string news) {latestNews news;notifySubscribers();}void registerSubscriber(std::shared_ptrSubscriber subscriber) override {subscribers.push_back(subscriber);}void removeSubscriber(std::shared_ptrSubscriber subscriber) override {subscribers.erase(std::remove(subscribers.begin(), subscribers.end(), subscriber), subscribers.end());}void notifySubscribers() override {for (auto subscriber : subscribers) {subscriber-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 Subscriber name received: message std::endl;}
};// 客户端代码
int main() {auto publisher std::make_sharedNewsPublisher();auto subscriber1 std::make_sharedConcreteSubscriber(Alice);auto subscriber2 std::make_sharedConcreteSubscriber(Bob);publisher-registerSubscriber(subscriber1);publisher-registerSubscriber(subscriber2);publisher-publishNews(Breaking News: Observer Pattern in Action!);publisher-publishNews(Latest Update: New Design Patterns Discovered!);publisher-removeSubscriber(subscriber1);publisher-publishNews(Exclusive: Observer Pattern Simplified!);return 0;
}总结
观察者模式帮助我们定义了对象间的一对多依赖关系使得对象之间的通信变得更加灵活和可扩展。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/930604.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!