当前位置: 首页 > wzjs >正文

校园网站建设提升郑州妇科医院免费咨询

校园网站建设提升,郑州妇科医院免费咨询,挖主题wordpress,开发app需要什么样的团队观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象(称为"主题"或"可观察对象")的状态发生改变时,所有依赖它的对象(称为"观察者")都会…

观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象(称为"主题"或"可观察对象")的状态发生改变时,所有依赖它的对象(称为"观察者")都会自动收到通知并更新。

主要组成部分

  1. Subject (主题/可观察对象)
    • 维护一个观察者列表

    • 提供添加和删除观察者的方法

    • 提供通知观察者的方法

  2. Observer (观察者)
    • 定义一个更新接口,用于在主题状态改变时接收通知

  3. ConcreteSubject (具体主题)
    • 存储对观察者有意义的状态

    • 当状态改变时,向观察者发送通知

  4. ConcreteObserver (具体观察者)
    • 维护一个对具体主题对象的引用

    • 实现观察者更新接口,使自身状态与主题状态保持一致

  5. 代码
    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <memory>// 前向声明
    class Observer;// 主题接口
    class Subject {
    public:virtual ~Subject() = default;virtual void registerObserver(Observer* o) = 0;virtual void removeObserver(Observer* o) = 0;virtual void notifyObservers() = 0;
    };// 观察者接口
    class Observer {
    public:virtual ~Observer() = default;virtual void update(float temp, float humidity, float pressure) = 0;
    };// 具体主题 - 气象数据
    class WeatherData : public Subject {
    public:void registerObserver(Observer* o) override {observers.push_back(o);}void removeObserver(Observer* o) override {observers.erase(std::remove(observers.begin(), observers.end(), o),observers.end());}void notifyObservers() override {for (auto* observer : observers) {observer->update(temperature, humidity, pressure);}}void measurementsChanged() {notifyObservers();}void setMeasurements(float temp, float humidity, float pressure) {this->temperature = temp;this->humidity = humidity;this->pressure = pressure;measurementsChanged();}private:std::vector<Observer*> observers;float temperature = 0.0f;float humidity = 0.0f;float pressure = 0.0f;
    };// 具体观察者 - 当前状况显示
    class CurrentConditionsDisplay : public Observer {
    public:explicit CurrentConditionsDisplay(Subject* weatherData) : weatherData(weatherData) {weatherData->registerObserver(this);}~CurrentConditionsDisplay() {weatherData->removeObserver(this);}void update(float temp, float humidity, float pressure) override {this->temperature = temp;this->humidity = humidity;display();}void display() const {std::cout << "Current conditions: " << temperature << "°C and " << humidity << "% humidity\n";}private:Subject* weatherData;float temperature = 0.0f;float humidity = 0.0f;
    };// 使用示例
    int main() {WeatherData weatherData;CurrentConditionsDisplay currentDisplay(&weatherData);weatherData.setMeasurements(25, 65, 1013);weatherData.setMeasurements(26, 70, 1012);return 0;
    }
  6. uml结构图

 

优点

  1. 松耦合:主题和观察者之间是松耦合的,主题不需要知道观察者的具体类。

  2. 动态关系:可以在运行时动态添加或删除观察者。

  3. 广播通信:主题可以一次通知多个观察者。

缺点

  1. 意外更新:由于观察者不知道其他观察者的存在,可能导致意外的更新。

  2. 性能问题:如果有大量观察者,通知所有观察者可能会花费较长时间。

应用场景

  1. 当一个对象的改变需要同时改变其他对象,而不知道具体有多少对象需要改变时。

  2. 当一个对象需要通知其他对象,但又不希望与这些对象形成紧耦合时。

  3. GUI事件处理、发布-订阅系统、MVC架构等。

变体

  1. 推模型:主题将详细的变化数据推送给观察者(如上面的示例)。

  2. 拉模型:主题只通知观察者状态已改变,观察者根据需要从主题拉取数据。

观察者模式是许多软件系统中事件处理的基础,理解它对于设计灵活、可扩展的系统非常重要。

 


文章转载自:

http://1DH80A8T.Ltkms.cn
http://UIAX0OZs.Ltkms.cn
http://0PZwFvqw.Ltkms.cn
http://W14KjtRn.Ltkms.cn
http://6XWeyD9i.Ltkms.cn
http://gMsj7NwG.Ltkms.cn
http://9qqT17vT.Ltkms.cn
http://W3UBLSUs.Ltkms.cn
http://p49iFsEi.Ltkms.cn
http://XRTDehGr.Ltkms.cn
http://tFpmS0wo.Ltkms.cn
http://r0pm9iII.Ltkms.cn
http://9I3Zw6Yh.Ltkms.cn
http://uk3lDxjK.Ltkms.cn
http://n4xbyxVv.Ltkms.cn
http://MgXYjgnL.Ltkms.cn
http://92GBfp06.Ltkms.cn
http://USwHRQwH.Ltkms.cn
http://PPUbSL9h.Ltkms.cn
http://325zmujs.Ltkms.cn
http://gGqa5XQJ.Ltkms.cn
http://GjLcKxae.Ltkms.cn
http://z94QAEXf.Ltkms.cn
http://OKxMkH9s.Ltkms.cn
http://eiAJbdiB.Ltkms.cn
http://AmEQSiTr.Ltkms.cn
http://ET1usbRv.Ltkms.cn
http://AzTZ2b55.Ltkms.cn
http://MMU6MbOj.Ltkms.cn
http://s8yetEvm.Ltkms.cn
http://www.dtcms.com/wzjs/685182.html

相关文章:

  • 做网站 数据库深圳华强北营业时间
  • 网站后台设计教程视频企业网站建设周期
  • 个人网站项目策划书论坛网站有哪些
  • 境外做网站网站电脑制作图片的软件
  • 产权交易网站建设方案icp备案网站接入信息怎么填
  • 点击图片进入网站要怎么做《小城镇建设》》杂志社网站
  • 新手如何建设网站请简述网站开发的流程图
  • 济宁网站建设500元怎么修改网站主页
  • 公司要做网站去哪里购买网站服务器
  • 网站开发用qq登录网站无缝背景
  • 云南建设企业网站佛山网站建站建设
  • 做海淘网站赚钱吗vi设计服务
  • 抚州公司做网站知名网站域名被抢注
  • 海丰县建设局官方网站汕头网站制作方法
  • 计算机网站建设员上海建网站计划
  • wordpress网站的根目录在哪做影视网站该怎么发展
  • 网站页面组成利用社交网站做淘宝客
  • 编程网站开发培训在线制作网页系统
  • 网站建设实训报告意见和建议怎么做营销网站
  • 烟台做网站需要多少钱网站 备份 还原
  • 网站如何交换链接wordpress黑暗
  • 网站域名已经被绑定网络营销推广的优劣势
  • 想开发一个旧物交易网站应该怎么做怎么自己做影视网站
  • 合肥网站开发公司电话网站文章采集
  • 二维码制作网站链接二次开发的意思
  • 网站如何微信支付镇江网站制作哪家公司比较好
  • 做网站工资高么网站建设费属于无形资产吗
  • 新手做淘宝哪个网站比较好网件路由器登录网址
  • wordpress网站360搜索收录怎样做音视频宣传网站
  • 武平县网站建设怀化废品回收市场在哪