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

网站免费搜索引擎有哪些分类

网站免费,搜索引擎有哪些分类,渠道合作平台,上海风险等级最新从C编程入手设计模式——观察者模式 ​ 观察者模式简直就是字如其名,观察观察,观察到了告诉别人。观察手的作用如此,观察者模式的工作机制也是如此。这个模式的核心思路是:一个对象的状态发生变化时,自动通知依赖它的…

从C++编程入手设计模式——观察者模式

​ 观察者模式简直就是字如其名,观察观察,观察到了告诉别人。观察手的作用如此,观察者模式的工作机制也是如此。这个模式的核心思路是:一个对象的状态发生变化时,自动通知依赖它的其他对象,让它们自行更新

主要的组成部分

一是被观察者,也叫主题(Subject),它负责记录观察者并在自身状态发生变化时通知它们;换而言之,Subject作为信息的生成端,生成信息。

二是观察者(Observer),它主动注册到被观察者中,等待被通知,一旦收到消息就立即采取行动。这里生成端会使用远程的方式通知我们的被观察者投送信息。

​ 你可以把观察者模式想象成“订阅报纸”。报社就是主题,它维护一个订阅者名单(观察者列表)。每当有新一期的报纸(数据更新)出版时,它就向所有订阅者投递(通知)。每位订阅者收到报纸后根据自己的需要决定怎么处理,是直接阅读、剪报存档还是转发朋友。这种发布-订阅机制就是观察者模式的最基本形式。


在 C++ 中怎么写?

观察者模式的代码实现非常自然。我们会先定义一个抽象的观察者接口(通常叫 Observer 或者 Sender),让不同的具体观察者实现它;再定义一个主题类(通常叫 SubjectNotifier),它包含一个观察者列表,并负责注册、移除和通知观察者。每当主题内部数据变化(比如温度、湿度更新),它就会遍历观察者列表,挨个调用它们的“更新方法”。观察者模式的重点不在于通知的“数据内容”本身,而在于自动通知的机制


选择观察者模式?

在简单的程序中,我们可能会直接调用某些对象来执行逻辑。但如果程序复杂起来,比如某个数据更新后要引发十几种操作,硬编码这些调用就会让系统结构僵硬,维护困难。

观察者模式将“变化的主体”和“依赖的反应者”解耦。被观察者不用关心观察者是谁,它只管发出通知。观察者自己决定是否接收通知、如何响应。这让系统的扩展性和灵活性大大提高

比如天气系统中新加一个“语音播报设备”,只要实现观察者接口并注册进去,其他部分代码几乎无需改动。


观察者模式的几个关键词

  1. 低耦合:主题和观察者之间不互相依赖,只通过接口通信。
  2. 自动同步:当主题数据变化时,所有观察者自动得到通知。
  3. 一对多:一个主题可以对应多个观察者。
  4. 注册/注销机制:观察者可以自由加入或离开通知流程。

Example

​ 可以直接看一个代码框架来解决问题

#include <iostream>
#include <vector>
#include <memory>
#include <string>
#include <algorithm>// 观察者接口
class Observer {
public:virtual void update(const std::string& message) = 0;virtual ~Observer() = default;
};// 具体观察者
class ConcreteObserver : public Observer {
private:std::string name;
public:explicit ConcreteObserver(std::string n) : name(std::move(n)) {}void update(const std::string& message) override {std::cout << "Observer [" << name << "] received: " << message << '\n';}
};// 主题接口
class Subject {
public:virtual void attach(std::shared_ptr<Observer> observer) = 0;virtual void detach(std::shared_ptr<Observer> observer) = 0;virtual void notify(const std::string& message) = 0;virtual ~Subject() = default;
};// 具体主题
class ConcreteSubject : public Subject {
private:std::vector<std::shared_ptr<Observer>> observers;
public:void attach(std::shared_ptr<Observer> observer) override {observers.push_back(std::move(observer));}void detach(std::shared_ptr<Observer> observer) override {observers.erase(std::remove(observers.begin(), observers.end(), observer), observers.end());}void notify(const std::string& message) override {for (const auto& observer : observers) {observer->update(message);}}
};int main() {auto subject = std::make_shared<ConcreteSubject>();auto obs1 = std::make_shared<ConcreteObserver>("Observer1");auto obs2 = std::make_shared<ConcreteObserver>("Observer2");subject->attach(obs1);subject->attach(obs2);subject->notify("Event 1 occurred");subject->detach(obs1);subject->notify("Event 2 occurred");return 0;
}

​ 你可以使用这样的方式来作为事件驱动框架的一个根基。

练习题

天气站系统

要求:设计一个天气数据发布系统,天气站(WeatherStation)是“主题”,可通知多个“观察者”显示设备(如手机、网页等)。

功能要求

  1. 观察者可以注册/注销。
  2. 当温度或湿度变化时,所有注册观察者会收到更新并打印数据。(注:这个部分笔者的参考代码没有实现,您自己酌情思考)

提示

  • 使用接口 IObserver 表示观察者,定义如 update(float temperature, float humidity)
  • 主题接口 ISubject 需要支持 registerObserver()removeObserver()notifyObservers()
  • 可以实现两个观察者类 PhoneDisplayWebDisplay

modern-cpp-patterns-playground/Observer/WeatherForecast at main · Charliechen114514/modern-cpp-patterns-playground

http://www.dtcms.com/wzjs/289392.html

相关文章:

  • asp.net网站恢复seo实战优化
  • h5彩票网站怎么做雅虎日本新闻
  • 建湖人才网seo百度百科
  • 下载软件商店app优化大师官方网站
  • 营销型网站效果不好seo按照搜索引擎的什么对网站
  • 福建新闻最新消息seo网站推广如何做
  • 百度网站建设哪家公司好如何推广一个网站
  • 做调查赚钱的网站线下宣传渠道和宣传方式
  • 昆明php网站建设长春网络优化最好的公司
  • 金安区住房和城乡建设局网站百度seo排名优化软件分类
  • 深圳 外贸 网站建设 龙关键词seo排名优化推荐
  • 建筑建材网站设计费用百度登录入口官网
  • 小网站做长尾词还是流量词对网站提出的优化建议
  • 牡丹江seo网站推广蜘蛛屯优化排名新闻稿发布软文平台
  • 成都优化官网公司外贸网站优化
  • 南安网站设计全网营销系统怎么样
  • 一般网站的前台功能模块全网推广平台推荐
  • 网页商城设计商城网站设计案例什么是网络营销战略
  • 网站建设项目策划书范文网络营销的八种方式
  • 汝州市住房和城乡规划建设局网站网络营销策略分析报告
  • 在马来西亚做博彩网站合法吗抖音推广引流平台
  • 产品seo怎么优化重庆网站优化
  • 有做网站设计吗网络营销师
  • 烟台网站建设报价官网关键词优化价格
  • 建站公司成功案例百度网站的域名地址
  • 做传奇网站云服务器地域改选哪里网站seo方案模板
  • 杭州h5建站在线咨询广州网站建设工作室
  • B2C购物网站的特色seo优化实训总结
  • 网站开发 在线数据库如何搭建一个自己的网站
  • 制作网站建设规划书关键词优化靠谱推荐