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

临沂市建设局网站勘察设计如何做自己的网站或者论坛

临沂市建设局网站勘察设计,如何做自己的网站或者论坛,推广方案策略怎么写,保定高端网站建设【设计模式】 观察者模式介绍及C代码实现 背景 在软件构建过程中#xff0c;我们需要为某些对象建立一种“通知依赖关系”#xff0c;即一个对象#xff08;目标对象#xff09;的状态发生改变#xff0c;所有的依赖对象#xff08;观察者对象#xff09;都将得到通知。…【设计模式】 观察者模式介绍及C代码实现 背景 在软件构建过程中我们需要为某些对象建立一种“通知依赖关系”即一个对象目标对象的状态发生改变所有的依赖对象观察者对象都将得到通知。如果这样的依赖关系过于紧密将使软件不能很好地抵御变化。 假设有一个简单的应用场景一个气象站记录当地天气的温度、湿度和气压并将这些数据展示在一个显示屏上。现在需要实现一个气象站的应用支持多个显示屏同时显示气象数据这时候就可以使用观察者模式来实现。 定义 观察者模式Observer Pattern是一种常用的设计模式它定义了一种一对多的依赖关系让多个观察者对象同时监听某一个主题对象当主题对象发生变化时它的所有观察者都会收到通知并更新自己的状态。观察者模式又称为发布-订阅模式。 观察者模式的主要角色包括以下几个部分 Subject主题被观察的对象它将所有观察者对象的引用保存在一个集合中并提供了添加和删除观察者对象的方法。 Observer观察者观察者接口定义了更新自己的状态的方法以便主题在状态发生变化时通知观察者。 ConcreteSubject具体主题具体的主题实现类维护一个状态并在状态发生变化时通知所有观察者。 ConcreteObserver具体观察者具体的观察者实现类实现观察者接口中定义的方法以便在接收到主题的通知时更新自己的状态。 应用场景 观察者模式常常被用于以下场景 一对多的依赖关系当一个对象的状态发生变化时需要通知多个对象并且这些对象需要根据主题对象的状态进行相应的处理这时可以使用观察者模式。 发布-订阅模型观察者模式也被称为发布-订阅模型。在这个模型中主题对象充当发布者的角色而观察者充当订阅者的角色。主题对象不需要知道具体的观察者只需要通知所有的观察者即可。 GUI 事件处理在 GUI 编程中经常使用观察者模式来处理用户界面事件。例如当用户点击按钮时程序会通知所有的事件监听器来处理该事件。 网络编程在网络编程中经常使用观察者模式来实现异步通信。例如当客户端连接服务器时服务器会通知所有的客户端连接已建立。 总之当一个对象的状态发生变化时需要通知多个对象并且这些对象需要根据主题对象的状态进行相应的处理时可以使用观察者模式。观察者模式可以帮助我们降低系统的耦合度增强系统的灵活性和可维护性。 模式结构 实现步骤 观察者模式的实现步骤如下 定义 Subject 接口该接口定义了注册观察者、删除观察者和通知观察者的方法。 定义 Observer 接口该接口定义了观察者需要实现的方法。 定义具体主题类 ConcreteSubject实现 Subject 接口并包含观察者列表。具体主题类负责管理观察者列表并在状态发生改变时通知观察者。 定义具体观察者类 ConcreteObserver实现 Observer 接口并在 update 方法中更新自己的状态。 在具体主题类中实现注册观察者、删除观察者和通知观察者的方法。 在具体观察者类中实现 update 方法当主题对象的状态发生改变时观察者会接收到通知并更新自己的状态。 在客户端代码中创建具体主题对象和具体观察者对象并将观察者注册到主题对象中。 当主题对象的状态发生改变时观察者会接收到通知并更新自己的状态从而实现观察者模式的功能。 观察者模式的核心思想是将主题和观察者解耦使得它们可以独立地变化。主题对象负责管理状态和通知观察者而观察者对象负责更新自己的状态。观察者模式可以帮助我们降低系统的耦合度增强系统的灵活性和可维护性。 C语言代码示例 #include stdio.h #include stdlib.h #include string.h// 定义观察者接口 typedef struct _Observer {void (*update)(struct _Observer* self); } Observer;// 定义主题接口 typedef struct _Subject {void (*registerObserver)(struct _Subject* self, Observer* observer);void (*removeObserver)(struct _Subject* self, Observer* observer);void (*notifyObservers)(struct _Subject* self); } Subject;// 定义具体观察者类 typedef struct _ConcreteObserver {Observer base;char name[20]; } ConcreteObserver;// 定义具体主题类 typedef struct _ConcreteSubject {Subject base;Observer* observers[10];int count;int state; } ConcreteSubject;// 实现具体观察者类的更新方法 void ConcreteObserver_update(Observer* self) {ConcreteObserver* observer (ConcreteObserver*)self;printf(%s: state changed\n, observer-name); }// 实现具体主题类的注册观察者方法 void ConcreteSubject_registerObserver(Subject* self, Observer* observer) {ConcreteSubject* subject (ConcreteSubject*)self;if (subject-count 10) {subject-observers[subject-count] observer;} }// 实现具体主题类的删除观察者方法 void ConcreteSubject_removeObserver(Subject* self, Observer* observer) {ConcreteSubject* subject (ConcreteSubject*)self;for (int i 0; i subject-count; i) {if (subject-observers[i] observer) {for (int j i; j subject-count - 1; j) {subject-observers[j] subject-observers[j 1];}subject-count--;break;}} }// 实现具体主题类的通知观察者方法 void ConcreteSubject_notifyObservers(Subject* self) {ConcreteSubject* subject (ConcreteSubject*)self;for (int i 0; i subject-count; i) {subject-observers[i]-update(subject-observers[i]);} }int main() {// 创建具体主题对象ConcreteSubject subject;memset(subject, 0, sizeof(ConcreteSubject));subject.base.registerObserver ConcreteSubject_registerObserver;subject.base.removeObserver ConcreteSubject_removeObserver;subject.base.notifyObservers ConcreteSubject_notifyObservers;// 创建具体观察者对象ConcreteObserver observer1, observer2;memset(observer1, 0, sizeof(ConcreteObserver));memset(observer2, 0, sizeof(ConcreteObserver));observer1.base.update ConcreteObserver_update;observer2.base.update ConcreteObserver_update;strcpy(observer1.name, Observer 1);strcpy(observer2.name, Observer 2);// 注册观察者subject.base.registerObserver(subject.base, (Observer*)observer1);subject.base.registerObserver(subject.base, (Observer*)observer2);// 改变主题对象的状态subject.state 1;// 通知观察者subject.base.notifyObservers(subject.base);// 删除观察者 总结 使用面向对象的抽象 Observer模式使得我们可以独立地改变目标与观察者从而使二者之间的依赖关系达致松耦合。 目标发送通知时无需指定观察者通知可以携带通知信息作为参数会自动传播。 观察者自己决定是否需要订阅通知目标对象对此一无所知。 观察者模式是基于事件的UI框架中非常常用的设计模式也是MVC模式的一个重要组成部分。
http://www.hkea.cn/news/14521898/

相关文章:

  • 写作网站六大神书免费网页申请
  • 做动画网站去哪采集绵阳东原建设工程有限公司网站
  • 阜阳网站建设价格低网站建设的经营范围
  • 有哪些官方网站做的比较好昆山网站建设义搏
  • 宜昌市建设厅官方网站安庆集团网站建设
  • 网站后台管理图片水印怎么做网页设计与制作难不难
  • 怎么分析网站的外链建设情况教育网站赏析
  • 制作一个网站的费用如何建设网站 知乎
  • 瑞安市网站建设网站搭建心得体会
  • 做任务的网站有那些成都网站托管外包
  • 熊猫头表情包制作网站移动网站自助制作
  • php开发网站项目心得抖音代运营合作
  • 关于网站建设交易流程的描述一句话手机微网站尺寸
  • 不用登录的小游戏网站做网站网页维护手机App开发
  • 上饶建设网站河北软件开发网站建设
  • 东莞网站的制作设计wordpress 5 开发
  • 高端开发网站系统wordpress 回复显示
  • 做旅行社网站网页设计图片位置
  • 厦门网站排名优化费用wordpress分享型主题模板下载
  • 苏州市建设局安监站网站中铁二局深圳公司官网
  • 网站怎么申请微博登录微信小程序怎么制作流程
  • 网站登录页面模板空壳网站清理
  • 做网站就业要会什么东莞疾控中心最新通知
  • 做网站的网站犯法吗网站开发ipv6升级
  • 什么网站可以做产品入驻物流企业网站建设方案
  • 网站seo顾问品牌建设运营方案
  • 惠州市建设局人员备案网站360建站系统
  • 专业做设计的网站网站建设平台协议书
  • python做的网站哪些做结构图用什么网站
  • 网站建设代码怎么写哪个公司网络信号最好