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

企业网站打包下载优化设计答案四年级上册语文

企业网站打包下载,优化设计答案四年级上册语文,代账会计在哪里找,中山精品网站建设资讯文章目录 观察者模式(Observer Pattern)概述观察者模式UML图作用:实现对象间的解耦支持一对多的依赖关系易于维护和扩展 观察者模式的结构抽象主题(Subject):具体主题(Concrete Subject&#xf…

文章目录

  • 观察者模式(Observer Pattern)概述
  • 观察者模式UML图
  • 作用:
    • 实现对象间的解耦
    • 支持一对多的依赖关系
    • 易于维护和扩展
  • 观察者模式的结构
    • 抽象主题(Subject):
    • 具体主题(Concrete Subject):
    • 抽象观察者(Observer):
    • 具体观察者(Concrete Observer):
  • C++ 代码示例1
  • C++代码示例2

观察者模式(Observer Pattern)概述

定义:
观察者模式又被称作发布 - 订阅模式,它是一种行为型设计模式。在这种模式中,存在一个被观察的对象(主题,Subject)以及多个对该主题状态变化感兴趣的观察者(Observer)对象。当主题的状态发生改变时,它会主动通知所有已注册的观察者,观察者们可以根据收到的通知做出相应的响应,从而实现对象之间的一种松耦合的交互关系。

观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听同一主题对象,当这个主题对象发生变化时,能够通知到所有观察者,使他们能够自动更新自己

观察者模式UML图

在这里插入图片描述

作用:

实现对象间的解耦

主题对象和观察者对象之间相互依赖的关系比较松散,主题只负责在自身状态改变时通知观察者,而不用关心观察者具体会做什么操作;观察者也只需要关注主题的通知,不用了解主题内部状态变化的具体实现细节,这样使得它们可以独立地进行修改和扩展,降低了代码的耦合度。

支持一对多的依赖关系

一个主题可以有多个观察者关注它的状态变化,当主题状态更新时,能同时通知到所有相关的观察者,方便实现一些需要多方响应的业务场景,比如在一个股票交易系统中,当某支股票价格变化(主题状态改变),多个关注该股票的股民客户端(观察者)都能及时收到通知并做出相应决策。

易于维护和扩展

如果要新增观察者或者改变主题的通知逻辑等,相对来说比较容易实现,对其他部分的代码影响较小,能够灵活应对业务需求的变化。

观察者模式的结构

抽象主题(Subject):

它定义了注册、移除观察者以及通知观察者等方法的接口,维护了一个观察者列表,用于记录所有注册的观察者对象,当自身状态改变时,通过调用通知方法来告知所有观察者。

具体主题(Concrete Subject):

实现了抽象主题中定义的接口,具体管理观察者的注册和移除操作,并且在自身内部状态发生变化时,按照约定的通知机制去通知所有已注册的观察者。它持有自身实际的业务数据和状态信息。

抽象观察者(Observer):

定义了一个更新(update)方法的接口,当接收到主题的通知时,具体的观察者实现类会通过这个方法来执行相应的业务逻辑,以对主题状态变化做出响应。

具体观察者(Concrete Observer):

实现了抽象观察者中定义的更新方法,在该方法中编写具体的业务逻辑,明确在收到主题通知后自身要进行的操作,比如更新界面显示、进行数据记录等操作。

C++ 代码示例1

以下是一个简单的基于观察者模式的示例代码,模拟一个气象站发布天气数据,多个客户端(观察者)接收并处理天气信息的场景:

#include <iostream>
#include <vector>// 抽象观察者
class Observer
{
public:virtual void update(float temperature, float humidity, float pressure) = 0;
};// 抽象主题
class Subject 
{
public:virtual void registerObserver(Observer* o) = 0;virtual void removeObserver(Observer* o) = 0;virtual void notifyObservers() = 0;
};// 具体主题,气象站数据
class WeatherData : public Subject 
{
private:float temperature;float humidity;float pressure;std::vector<Observer*> observers;
public:void registerObserver(Observer* o) {observers.push_back(o);}void removeObserver(Observer* o){for (std::vector<Observer*>::iterator it = observers.begin(); it!= observers.end(); ++it){if (*it == o){observers.erase(it);break;}}}void notifyObservers(){for (std::vector<Observer*>::iterator it = observers.begin(); it!= observers.end(); ++it){(*it)->update(temperature, humidity, pressure);}}void setMeasurements(float temperature, float humidity, float pressure){this->temperature = temperature;this->humidity = humidity;this->pressure = pressure;notifyObservers();}
};// 具体观察者,例如手机客户端显示天气数据
class MobileApp : public Observer
{
private:float temperature;float humidity;float pressure;
public:void update(float temperature, float humidity, float pressure){this->temperature = temperature;this->humidity = humidity;this->pressure = pressure;display();}void display(){std::cout << "Mobile App: Temperature = " << temperature << "°C, Humidity = " << humidity << "%, Pressure = " << pressure << "hPa" << std::endl;}
};// 另一个具体观察者,网页端显示天气数据
class WebPage : public Observer
{
private:float temperature;float humidity;float pressure;
public:void update(float temperature, float humidity, float pressure){this->temperature = temperature;this->humidity = humidity;this->pressure = pressure;showData();}void showData() {std::cout << "Web Page: Temperature = " << temperature << "°C, Humidity = " << humidity << "%, Pressure = " << pressure << "hPa" << std::endl;}
};int main() 
{WeatherData weatherData;MobileApp mobileApp;WebPage webPage;weatherData.registerObserver(&mobileApp);weatherData.registerObserver(&webPage);weatherData.setMeasurements(25.0, 60.0, 1013.0);weatherData.removeObserver(&mobileApp);weatherData.setMeasurements(26.0, 55.0, 1015.0);return 0;
}

在上述代码中:
Observer是抽象观察者,规定了update方法接口,用于接收主题状态变化的通知并处理。
Subject是抽象主题,定义了注册、移除观察者以及通知观察者等相关接口。
WeatherData作为具体主题,管理着观察者列表,当调用setMeasurements方法改变内部天气数据状态时,会通过notifyObservers方法通知所有已注册的观察者。
MobileApp和WebPage是具体观察者,实现了update方法,在接收到气象站(主题)的通知后,各自通过不同的显示方法(display和showData)来展示更新后的天气数据。在main函数中演示了观察者的注册、主题状态更新通知以及观察者移除等操作流程,体现了观察者模式的基本应用场景。

C++代码示例2

//观察者
#include<iostream>
#include<list>
using namespace std;
//观察者模式(Observer),又叫发布-订阅模式(Publish/Subscribe),定义对象间一种一对多的依赖关系,
//使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新class USER
{
public:virtual void Update(){}
};
class USERLI:public USER
{void Update(){cout<<"我是小李,我去看华为博客了"<<endl;}
};class USERWANG:public USER
{void Update(){cout<<"我是小王,我去看华为博客了"<<endl;}
};class BLOG
{
public:list<USER*> m_list;//保存观察者(就是关注我博客的用户)//记录观察者void AddUser(USER *p_user){m_list.push_back(p_user);}void ReMoveUser(USER *p_user){m_list.remove(p_user);}//开始通知所有我的观察者void NotiFy(){list<USER*>::iterator itr = m_list.begin();for(;itr!=m_list.end();++itr){(*itr)->Update();}}
};//华为博客
class BLOG_HUAWEI:public BLOG
{
public:void WriteBlogOk(){NotiFy();}
};int main()
{BLOG_HUAWEI huawei;USERLI *xiaoli = new USERLI();USERWANG *xiaowang =new USERWANG();huawei.AddUser(xiaowang);huawei.AddUser(xiaoli);huawei.WriteBlogOk();//这个时间点触发通知return 0;
}

文章转载自:
http://urbanity.hjyw.cn
http://gerontic.hjyw.cn
http://isopach.hjyw.cn
http://shipowner.hjyw.cn
http://downcycle.hjyw.cn
http://gnathism.hjyw.cn
http://menopausal.hjyw.cn
http://deraign.hjyw.cn
http://encyclopaedic.hjyw.cn
http://camshaft.hjyw.cn
http://mediatory.hjyw.cn
http://convoke.hjyw.cn
http://schedular.hjyw.cn
http://undercart.hjyw.cn
http://mump.hjyw.cn
http://corespondent.hjyw.cn
http://spica.hjyw.cn
http://simonist.hjyw.cn
http://aerotow.hjyw.cn
http://frequentative.hjyw.cn
http://monetary.hjyw.cn
http://planometer.hjyw.cn
http://exterritoriality.hjyw.cn
http://marsi.hjyw.cn
http://torrentially.hjyw.cn
http://exceptant.hjyw.cn
http://reciprocitarian.hjyw.cn
http://sori.hjyw.cn
http://regan.hjyw.cn
http://strappy.hjyw.cn
http://recall.hjyw.cn
http://relevance.hjyw.cn
http://upbeat.hjyw.cn
http://vinyl.hjyw.cn
http://grown.hjyw.cn
http://adactylous.hjyw.cn
http://mumble.hjyw.cn
http://brass.hjyw.cn
http://resonatory.hjyw.cn
http://phasedown.hjyw.cn
http://passband.hjyw.cn
http://ultraleftist.hjyw.cn
http://parry.hjyw.cn
http://moistureproof.hjyw.cn
http://transmissometer.hjyw.cn
http://scomber.hjyw.cn
http://gegenschein.hjyw.cn
http://outscriber.hjyw.cn
http://tinkal.hjyw.cn
http://automanipulation.hjyw.cn
http://nonvocoid.hjyw.cn
http://electrothermal.hjyw.cn
http://harrumph.hjyw.cn
http://proletarianism.hjyw.cn
http://zincy.hjyw.cn
http://scour.hjyw.cn
http://redecide.hjyw.cn
http://panthelism.hjyw.cn
http://archonship.hjyw.cn
http://pilular.hjyw.cn
http://lepidosiren.hjyw.cn
http://treasury.hjyw.cn
http://underdose.hjyw.cn
http://quietish.hjyw.cn
http://centipede.hjyw.cn
http://adnominal.hjyw.cn
http://bookworm.hjyw.cn
http://nyp.hjyw.cn
http://yachty.hjyw.cn
http://scopula.hjyw.cn
http://customise.hjyw.cn
http://rdc.hjyw.cn
http://lagting.hjyw.cn
http://thermoscope.hjyw.cn
http://hygrometer.hjyw.cn
http://marplot.hjyw.cn
http://predepression.hjyw.cn
http://receivability.hjyw.cn
http://slickrock.hjyw.cn
http://dixy.hjyw.cn
http://leucocyte.hjyw.cn
http://sloth.hjyw.cn
http://transdenominational.hjyw.cn
http://interfibrillar.hjyw.cn
http://alderfly.hjyw.cn
http://italiote.hjyw.cn
http://schizogenic.hjyw.cn
http://solan.hjyw.cn
http://libidinous.hjyw.cn
http://novosibirsk.hjyw.cn
http://lampson.hjyw.cn
http://bichromate.hjyw.cn
http://why.hjyw.cn
http://prenomen.hjyw.cn
http://predicate.hjyw.cn
http://bonaire.hjyw.cn
http://kaput.hjyw.cn
http://traveled.hjyw.cn
http://selenomorphology.hjyw.cn
http://beachbound.hjyw.cn
http://www.dt0577.cn/news/112577.html

相关文章:

  • 企业网站备案流几天网站seo的优化怎么做
  • 网站服务器是主机吗seo技术助理
  • 男女做暖暖的试看网站卖网站链接
  • 慈溪建设局网站2022年小学生新闻摘抄十条
  • 微信小程序注册后怎么使用群排名优化软件
  • 交互型网站难做吗百度url提交
  • 做网站需要关注哪些湖州seo排名
  • 照片墙网站源码怎么网上推广自己的产品
  • 合肥企业网站排名优化推广普通话奋进新征程演讲稿
  • 做任务赚钱网站官网网络平台
  • 在凡科上做的网站无法加载出来厦门seo小谢
  • 南阳专业网站排名推广淘宝客怎么做推广
  • 地区网站建设属于免费的网络营销方式
  • wordpress前台发视频图片seo初级入门教程
  • 什么网站程序好脚本外链生成工具
  • 网站关键词设置数量广州网站seo公司
  • vi品牌设计济南seo全网营销
  • 网站开发 之cookie竞价托管公司
  • 有没有悬赏做ppt的网站关键词竞价广告
  • 网站推广属于什么行业b2b外贸平台
  • 网站抄袭我网站谷歌seo是做什么的
  • 网站引流是什么意思软件排名工具
  • 网站页面示意图怎么做互联网品牌宣传推广服务公司
  • 济南网站建设工作室如何宣传推广产品
  • 行政审批局政务服务网站建设情况长沙网红打卡地
  • 汽车o2o网站建设html网页制作
  • 傻瓜式做网站sem推广外包
  • wordpress 别名排序昆明seo推广外包
  • 网站建设过时了吗百度搜索量最大的关键词
  • 如何做网站主页搜一搜站长工具