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

讨论致同国际网站建设情况永州网站seo

讨论致同国际网站建设情况,永州网站seo,wordpress 定时显示,江苏省南京市栖霞区【设计模式】 观察者模式介绍及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.dnsts.com.cn/news/926.html

相关文章:

  • 济南房产信息网seo全网营销公司
  • 做跨境电商网站报价网络营销形式
  • 张家口网站建设深圳整合营销
  • 自己如何制作一个软件重庆seo黄智
  • 网页设计尺寸规范psseo营销培训
  • 公司资质查询官方网站怎么免费制作网页
  • 网站代码怎么改国内网站建设公司
  • 广州哪里做公司网站号网络推广外包要多少钱
  • 做优化网站多少钱东莞做网站seo
  • 昆山品牌设计公司营销型网站建设优化建站
  • 电脑上如何做网站宣传什么是seo优化推广
  • 碑林区营销型网站建设软文营销的技巧
  • 网站标签优化怎么做移动端排名优化软件
  • 学校网站建设目的是什么意思网络营销工具的特点
  • wordpress博客空间百度快照优化seo
  • 吉林大学建设工程学院官方网站竞价推广套户渠道商
  • 有没有什么做h5的网站营销网站类型
  • 沈阳企业网站2023年最新时政热点
  • 电子商务网站建设规划书四大营销策略
  • ps设计网站步骤舆情报告
  • 网站建设的违约责任制作网站平台
  • 郑州企业网站制作公司河南网络推广那家好
  • 苏州哪家做网站好些建站为应用技术
  • kali做钓鱼网站搜索引擎营销的实现方法有
  • 麟游做网站腾讯企业邮箱登录入口
  • 织梦手机网站有广告环球网广东疫情最新消息
  • 手机下载视频网站模板nba最新新闻
  • 龙之向导外贸专区潍坊网站建设seo
  • 泉州seo建站免费信息推广平台
  • 做三折页的网站国际实时新闻