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

湖北网站建设开发国外效果图网站

湖北网站建设开发,国外效果图网站,中国万方官网,wordpress图片并排链接:C 设计模式 链接:C 设计模式 - 模板方法 链接:C 设计模式 - 策略模式 观察者模式(Observer Pattern)是一种行为设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主…

链接:C++ 设计模式
链接:C++ 设计模式 - 模板方法
链接:C++ 设计模式 - 策略模式

观察者模式(Observer Pattern)是一种行为设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当主题对象的状态发生变化时,它会通知所有观察者对象,使它们能够自动更新。

1.问题分析

在开发中,经常会遇到需要在一个对象状态变化时通知其他对象的情况。如果将通知逻辑直接嵌入到主题对象中,会导致代码耦合度高,难以维护和扩展。观察者模式通过将观察者对象和主题对象解耦,使得它们可以独立变化。

2.实现步骤

  1. 定义观察者接口:定义一个接口,包含更新方法。
  2. 定义主题接口:定义一个接口,包含注册、注销和通知观察者的方法。
  3. 实现具体主题类:具体主题类实现主题接口,并维护一个观察者列表。
  4. 实现具体观察者类:具体观察者类实现观察者接口,并在更新方法中实现具体的响应逻辑。

3.代码示例

以机器人电池电量作为示例:

3.1.观察者接口

// 定义更新方法
class Observer {public:virtual ~Observer() = default;virtual void update(int batteryLevel) = 0;
};

3.2. 主题接口

// 定义添加、删除和通知观察者的方法
class Subject {public:virtual ~Subject() = default;virtual void addObserver(std::shared_ptr<Observer> observer) = 0;virtual void removeObserver(std::shared_ptr<Observer> observer) = 0;virtual void notifyObservers() = 0;
};

3.3.具体主题类

// 实现主题接口
class Robot : public Subject {public:void addObserver(std::shared_ptr<Observer> observer) override { observers.push_back(observer); }void removeObserver(std::shared_ptr<Observer> observer) override {observers.erase(std::remove(observers.begin(), observers.end(), observer), observers.end());}void notifyObservers() override {for (const auto& observer : observers) {observer->update(batteryLevel);}}void setBatteryLevel(int level) {batteryLevel = level;notifyObservers();}private:std::vector<std::shared_ptr<Observer>> observers;int batteryLevel = 100;
};

3.4.具体观察者类

// 具体观察者类1,显示电池电量
class BatteryDisplay : public Observer {public:void update(int batteryLevel) override { std::cout << "BatteryDisplay: Battery level is " << batteryLevel << "%" << std::endl; }
};
// 具体观察者类2,当电池电量低于20%时发出警告
class BatteryWarning : public Observer {public:void update(int batteryLevel) override {if (batteryLevel < 20) {std::cout << "BatteryWarning: Warning - Battery level low (" << batteryLevel << "%)" << std::endl;}}
};

3.5.调用算法

int main() {auto robot = std::make_shared<Robot>();auto batteryDisplay = std::make_shared<BatteryDisplay>();auto batteryWarning = std::make_shared<BatteryWarning>();robot->addObserver(batteryDisplay);robot->addObserver(batteryWarning);std::cout << "Setting battery level to 50%" << std::endl;robot->setBatteryLevel(50);std::cout << "\nSetting battery level to 15%" << std::endl;robot->setBatteryLevel(15);return 0;
}
http://www.yayakq.cn/news/299120/

相关文章:

  • 作品展示网站模板ip形象设计
  • 导购网站模板深圳网站建设 培训
  • jsp网站开发面试题营销型网站源码
  • 怎么注销自己做的网站帝国网站管理 上一条 下一条 链接 信息id 信息发布时间
  • 新网站建设咨询经典重庆区县论坛
  • 腾讯网静态网站建设互联网公司运营
  • 网站制作建设是做什么盘锦网站建设优化
  • 杭州响应式网站案例前端做网站如何调接口
  • 盐城网站优化推广服务无锡网站关键词推广
  • wordpress二级域名做站群百度导航下载2022最新版官网
  • 从零开始学手机网站开发教程昆明做网站哪家公司好
  • s吗网站虚拟主机企业网站建设开发注意事项
  • 福州网站制作维护提高网站访问量
  • 用php做网站教程扬州网站商城建设价格表
  • 本地网站模板什么网站动物和人做的吗
  • 建设工程施工许可证查询网站阳江人力资源招聘网最新招聘
  • 女装网站建设规划书怎么写阿里云域名注册官网首页
  • 网站怎么申请域名wordpress春节插件
  • 网站信息备案查询网站建设百度知道
  • wordpress制作视频站吉林seo基础知识
  • 站长之家 wordpress 流量统计深圳网站设计公司
  • 做网站市场价格凡科网 小程序
  • 网站简繁切换js给企业做网站用什么程序
  • 企业网站用哪个cms好牛企网络科技有限公司
  • 网站建设juxinghulianwordpress dux5.1
  • 服务器怎样做网站呢wordpress单栏简洁
  • 深圳 网站 设计自己如何制作一个软件
  • 可以自己做漫画的网站营销型网站建设tfx88
  • 大连做网站优化哪家好2019网站seo
  • 中国建设网站下载广州网站建设技术外包