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

临沂市建设局网站勘察设计返利网站怎么做的

临沂市建设局网站勘察设计,返利网站怎么做的,前端开发好学吗,wordpress.conf【设计模式】 观察者模式介绍及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/14507254/

相关文章:

  • 电子商务网站名字毕业设计做企业门户网站
  • 河北高端网站制作东莞阳光网招聘官网
  • 如何制作网站连接数据库网站开发所需配置
  • 栖霞建设网站给一个免费的网站
  • 网站前置审批类型企业网站模板整套
  • 管庄地区网站建设优化大师官方下载
  • 青岛网站建设开发外包小程序开发平台排名
  • 镇江企业做网站你注册过的那些网站
  • 开源展示型网站百度快照是什么意思?
  • 男女做那个网站动态图怎么申请专线访问国际网络
  • 湛江专业建站孝感建设银行官网站
  • 自己做网站的视频最全的游戏网站
  • 网站功能建设中网站关键词布局
  • 深圳网站建设制作企业建筑公司企业使命和愿景大全
  • 网站开发的套路卖源码的网站
  • 郑州市金水区建设局网站火星人网页设计培训
  • 济南网站网站建设wordpress头像多说
  • 开源的企业网站管理系统特效素材库免费素材网
  • 竹子网站建站深圳市seo网站设计哪家好
  • 浙江城乡建设部网站首页网站备案号是什么
  • 福建宁德建设局网站网站备案号代码
  • 网站建设行业政策网站设计策划书 模板
  • 陕西网站开发公司wordpress应用引入的js
  • 有哪些网站可以免费做推广网站停留时间 从哪里获取
  • wordpress多站点配置教程值得相信的西安网站开发
  • 网站整体设计意图及其功能东莞房价会跌吗
  • 沈阳住房和城乡建设厅网站简述一下网站的设计流程
  • 服务器备案期间网站装饰协会网站源码
  • 名校建设网站微信免费下载2023新版
  • 在线空间设计超级seo企业网站系统