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

网站做a视频在线观看网站关于旅游网站策划书

网站做a视频在线观看网站,关于旅游网站策划书,怎么修改网站域名,软件平台搭建流程设计模式-07 设计模式-观察者模式(Observer Pattern) 1.定义 观察者模式是一种软件设计模式,它定义了一种一对多的依赖关系,其中一个对象(称为“主题”)维护了一个依赖对象的列表(称为“观察者”…
设计模式-07 设计模式-观察者模式(Observer Pattern)

1.定义


观察者模式是一种软件设计模式,它定义了一种一对多的依赖关系,其中一个对象(称为“主题”)维护了一个依赖对象的列表(称为“观察者”),并且当主题的状态发生变化时,它会自动通知所有观察者。


2.内涵

换句话说,观察者模式允许对象订阅其他对象并接收有关其状态更改的通知。主题对象负责管理观察者列表并通知它们任何状态更改。

涉及到的相关术语:

主题(Subject):维护观察者列表并通知它们状态更改的对象。
观察者(Observer):订阅主题并接收有关其状态更改的通知的对象。
具体主题(Concrete Subject):实现主题接口并维护具体状态和观察者列表的类。
具体观察者(Concrete Observer):实现观察者接口并定义对主题状态更改的响应的类。


工作原理,当观察者模式使用时:

  • 观察者向主题注册,表示他们有兴趣接收状态更改通知。
  • 主题维护一个观察者列表,其中包含所有已注册的观察者。
  • 当主题的状态发生变化时,它会遍历观察者列表并调用每个观察者的 update() 方法。
  • 观察者收到通知并相应地更新自己的状态。
3.使用案例
#include <iostream>
#include <vector>// Observer interface
class Observer {
public:virtual void update(float temperature, float humidity, float pressure) = 0;
};// Subject (WeatherStation) class
class WeatherStation {
private:float temperature;float humidity;float pressure;std::vector<Observer*> observers;public:void registerObserver(Observer* observer) {observers.push_back(observer);}void removeObserver(Observer* observer) {// You can implement the removal logic if needed.}void notifyObservers() {for (Observer* observer : observers) {observer->update(temperature, humidity, pressure);}}void setMeasurements(float temp, float hum, float press) {temperature = temp;humidity = hum;pressure = press;notifyObservers();}
};// Concrete Observer
class Display : public Observer {
public:void update(float temperature, float humidity, float pressure) {std::cout << "Display: Temperature = " << temperature<< "°C, Humidity = " << humidity<< "%, Pressure = " << pressure << " hPa"<< std::endl;}
};int main() {WeatherStation weatherStation;// Create displaysDisplay display1;Display display2;// Register displays as observersweatherStation.registerObserver(&display1);weatherStation.registerObserver(&display2);// Simulate weather data updatesweatherStation.setMeasurements(25.5, 60, 1013.2);weatherStation.setMeasurements(24.8, 58, 1014.5);return 0;
}

4.注意事项

观察者模式的优点包括:

  • 松散耦合:观察者和主题是松散耦合的,这意味着它们可以独立更改而不会影响彼此。
  • 可扩展性:可以轻松地向系统中添加或删除观察者,而不会影响主题或其他观察者。
  • 可重用性:观察者模式可以轻松地应用于不同的应用程序和领域。

观察者模式的缺点包括:

  • 性能开销:当主题的状态经常更改时,通知所有观察者可能会产生性能开销。
  • 通知顺序:观察者模式不保证观察者将按特定顺序收到通知。
  • 内存占用:如果有很多观察者订阅主题,主题需要维护一个很大的观察者列表,这可能会导致内存占用增加。

5.最佳实践
  • 使用接口而不是具体类:主题和观察者接口应该用于定义主题和观察者之间的关系,而不是使用具体类。这提高了代码的可重用性和灵活性。
  • 使用弱引用:观察者应该使用弱引用持有对主题的引用。这可以防止循环引用,并允许在观察者不再需要时自动释放它们。
  • 考虑使用事件对象:事件对象可以用来封装状态更改通知。这可以提供更丰富的通知,其中包含有关状态更改的附加信息。
  • 使用主题层次结构:当需要对不同类型的状态更改进行更精细的控制时,可以使用主题层次结构。这允许观察者只订阅他们感兴趣的特定状态更改。


使用观察者模式,需要考虑优化通知性能,如果主题的状态经常更改,可以使用以下技术来优化通知性能:

  • 使用位掩码或标志来跟踪已更改的状态方面。
  • 批量处理观察者通知。
  • 使用异步通知机制,例如消息队列。
  • 使用线程安全:如果主题或观察者可能从多个线程访问,则需要使用线程安全技术,例如互斥锁或原子操作。
  • 考虑使用第三方库:有许多第三方库提供了观察者模式的实现,可以简化其在应用程序中的使用。

6.总结

仅在需要时使用观察者模式。它可能会引入一些开销和复杂性。心中明白清楚地定义观察者订阅和取消订阅的机制。考虑使用观察者模式的变体,例如发布/订阅模式或模型-视图-控制器 (MVC) 模式。在设计观察者模式时,牢记 SOLID 原则(单一职责、开放/封闭、里氏替换、接口隔离和依赖反转)。

http://www.yayakq.cn/news/453027/

相关文章:

  • 江苏省建设厅官方网站公式公告宠物网站怎么做
  • 网站建设的主要技术路线网页游戏排行力荐新壹玩
  • 公司核名在哪个网站泉州建站模板源码
  • 网站做三方登陆需要注册公司不启蒙自助建站
  • 在酒吧里做那个视频网站设计网站vcg
  • 扬州市建设厅网站短网址生成器 网址: 生成短网址
  • 网站建设淘宝评价做一个公司的网站应做哪些准备工作
  • 订餐网站建设网站建设ssc源码修复
  • 做PPT的辅助网站做网站后台程序是怎么来的
  • 广州建站公司有哪些wordpress伪静态301
  • 天津 网站备案重庆大渡口网站建设
  • 织梦做网站视频教程我要注册
  • 温州市建设小学学校网站庆阳网络营销
  • 公司做网站需要准备什么软件wordpress主题更换logo
  • 企业微网站与手机微信号wordpress站点
  • 评价校园网站建设范例网店无货源怎么做
  • 化妆培训网站源码重庆网站开发小顶网
  • 网站 .net 多少钱迪奥网络营销方式
  • 衡水建网站费用滁州 来安县建设局网站
  • mysql同一数据库放多少个网站表Wordpress 反馈表单
  • 网站建设大数据正规网站建设推荐
  • 如何做120急救网站阿里云域名注册官网登录
  • 手机网站返回跳转个人门户登录
  • 百度做网站不给FTP密码平面设计基础学什么
  • 做网站用dw还是vs安卓软件制作网站
  • 上海网站设计公司推荐亿企邦网站seo分析案例
  • 网站的基础知识免费推广网站短视频
  • 怎么做网站版面分析猎头公司怎么找客户
  • 制作一般网站做wap网站能火吗
  • 石家庄网站建设找哪家好山东旗舰建设集团网站