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

网站部署设计网络规划设计师教程读后感

网站部署设计,网络规划设计师教程读后感,大朗镇做网站,介绍自己的做的网站文章目录 观察者模式#xff08;Observer Pattern#xff09;概述观察者模式UML图作用#xff1a;实现对象间的解耦支持一对多的依赖关系易于维护和扩展 观察者模式的结构抽象主题#xff08;Subject#xff09;#xff1a;具体主题#xff08;Concrete Subject#xf… 文章目录 观察者模式Observer Pattern概述观察者模式UML图作用实现对象间的解耦支持一对多的依赖关系易于维护和扩展 观察者模式的结构抽象主题Subject具体主题Concrete Subject抽象观察者Observer具体观察者Concrete Observer C 代码示例1C代码示例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::vectorObserver* observers; public:void registerObserver(Observer* o) {observers.push_back(o);}void removeObserver(Observer* o){for (std::vectorObserver*::iterator it observers.begin(); it! observers.end(); it){if (*it o){observers.erase(it);break;}}}void notifyObservers(){for (std::vectorObserver*::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 //观察者 #includeiostream #includelist 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:listUSER* 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(){listUSER*::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://www.dnsts.com.cn/news/214741.html

相关文章:

  • 响应式网站设计与实现论文郑州app开发哪家好
  • 设计师学编程能自己做网站吗重庆短视频制作公司
  • 做坏事小视频网站邢台集团网站建设报价
  • 90做网站自媒体营销推广方案
  • 嘉兴网站公司哪家好企业网站的制作用到的技术
  • it网站建设视觉设计网站推荐
  • 南海营销网站开发wordpress 多站点管理
  • 新河网站什么是网站后期建设
  • 怎么样让网站正常解析怎么去做网络推广
  • 微网站如何做推广做网站一个月能赚多少钱
  • 信息技术会考做网站做网站 怎么备案
  • 建网站内容意大利设计网站
  • 揭阳响应式网站价格wordpress 导航网站模板下载
  • 做网站设计的广告公司比较实用的h5网页建设网站
  • 网站开发项目经验描述全网营销概念
  • 怎么样建设一个电影网站视频网站后台信息维护要怎么做
  • 网站建设的格式app开发的基本步骤
  • 织梦网站头部到底部去了简易手工小制作
  • 巅云建站南通企业做网站
  • 在网站上发消息做宣传肇东网站建设
  • 网站开发需求分析实例珠海网络网站建设
  • 北京高端品牌网站定制计算机平面设计主要做什么
  • 网站建设专家 金石下拉WordPress开启mecache
  • 建设网站重庆开发公司注册资金要求
  • 龙山建设工程有限公司网站如何改wordpress网站图标
  • 济宁营销网站建设广告网架
  • yii2 网站开发网站设计职业培训
  • 不同类型网站优化小程序
  • 学生成绩管理系统网站建设支付网站备案
  • 网站注册费旅游网站建设的市场分析