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

淄博网站制作乐山网站seo

淄博网站制作,乐山网站seo,网站设计公司哪家比较好,龙岩到永定什么是观察者模式? 观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态…

什么是观察者模式?

观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。

观察者模式的角色:

Subject:抽象主题(被观察者),每一个主题可以有多个观察者,并将所有观察者对象的引用保存在一个集合里,被观察者提供一个接口,可以增加和删除观察者角色

ConcreteSubject:具体主题,将有关状态存入具体观察者对象,在主题发生改变时,给所有的观察者发出通知

Observer:抽象观察者,为所有的具体观察者定义一个更新接口,该接口的作用是在收到主题的通知时能够及时的更新自己

ConcreteObserver:具体观察者,实现抽象观察者角色定义的更新接口,以便使本身的状态与主题状态相协调。如果需要,具体观察者角色可以保存一个指向具体主题角色的引用。

参考来自设计模式(五)观察者模式,作者:刘望舒

观察者模式的使用场景:

观察者模式是一种对象行为型模式,它通常用于以下场景:

  • 消息服务器系统。
  • 社交媒体平台。
  • 邮件系统。
  • 图形界面应用程序。
  • 游戏。
  • 实现团队协作,提高工作效率。
  • 观察者模式可以在不同对象之间创建有效关系,从而更有效地开发高质量软件。

具体实现:

假设有这么一个场景:我是B站up主,有很多粉丝关注我,我发视频了,他们就会点赞我,我发癫了(说些不好的话)他们就会取关我。
在这种场景下,就很使用观察者模式,粉丝们关注我,根据我的状态而动态地做出反应。

观察者的接口

public interface MyObserver {void execute(String upName);
}

观察者对象

public class fans implements MyObserver {private String name;public fans(String name){this.name = name;}// 根据msg动态地执行方法@Overridepublic void execute(String msg) {if("更新了".equals(msg)){System.out.println(this.name+"点赞了你");}if("发癫了".equals(msg)){System.out.println(this.name+"举报了你");}}
}

被观察者接口

public interface SupObject {// 将粉丝增加在通知列表void add(MyObserver myObserver);// 将粉丝删除出通知列表void delete(MyObserver myObserver);// 通知void notify(String upName);
}

被观察者对象

public class up implements SupObject{List<MyObserver> notifyList = new ArrayList<>();@Overridepublic void add(MyObserver myObserver) {notifyList.add(myObserver);}@Overridepublic void delete(MyObserver myObserver) {notifyList.remove(myObserver);}@Overridepublic void notify(String msg) {notifyList.forEach(t-> t.execute(msg));}
}

执行器

public class client {public static void main(String[] args) {fans fans1 = new fans("小约翰可汗");fans fans2 = new fans("CSGO玩机器");fans fans3 = new fans("徐云流浪中国");up up = new up();up.add(fans1);up.add(fans2);up.add(fans3);up.notify("更新了");}
}

效果:

在这里插入图片描述

观察者模式的优缺点:

优点

解除耦合,让耦合的双方都依赖于抽象,从而使得各自的变换都不会影响另一边的变换。

缺点

在应用观察者模式时需要考虑一下开发效率和运行效率的问题,程序中包括一个被观察者、多个观察者,开发、调试等内容会比较复杂,而且在Java中消息的通知一般是顺序执行,那么一个观察者卡顿,会影响整体的执行效率,在这种情况下,一般会采用异步实现。

观察者模式和发布订阅模式的不同:

通过上面的代码,可能回产生这样的疑问?
这不是“被观察者”主动发送消息给“观察者”的吗?这么叫做观察者模式呢?主被动关系是不是搞反了?
其实观察者模式也叫做发布订阅模式。
比如《heah in first》中,就曾这么写

Publishers + Subscribers = Observer Pattern
在这里插入图片描述

但是!他们还是有差别的
在发布订阅模式里,发布者,并不会直接通知订阅者,换句话说,发布者和订阅者,彼此互不相识。
但在观察者模式中,观察者与被观察者是直接通信的。
这就是他们的差别:
观察者模式主打一个松耦合,但是他们还是耦合的。
但是发布订阅模式,完完全全的松开了!


文章转载自:
http://roebuck.rnds.cn
http://unclouded.rnds.cn
http://guttman.rnds.cn
http://aha.rnds.cn
http://trellis.rnds.cn
http://sweatband.rnds.cn
http://conarium.rnds.cn
http://boogiewoogie.rnds.cn
http://gannet.rnds.cn
http://dextrin.rnds.cn
http://softwood.rnds.cn
http://bursectomy.rnds.cn
http://razings.rnds.cn
http://tepp.rnds.cn
http://deceleration.rnds.cn
http://zurich.rnds.cn
http://porotic.rnds.cn
http://displease.rnds.cn
http://monkshood.rnds.cn
http://epileptogenic.rnds.cn
http://chetrum.rnds.cn
http://phantasm.rnds.cn
http://polynesia.rnds.cn
http://p.rnds.cn
http://philosophize.rnds.cn
http://goto.rnds.cn
http://plazolite.rnds.cn
http://obligingly.rnds.cn
http://latinist.rnds.cn
http://demoniac.rnds.cn
http://fatidic.rnds.cn
http://gamme.rnds.cn
http://pinkeye.rnds.cn
http://sunny.rnds.cn
http://ericaceous.rnds.cn
http://deathday.rnds.cn
http://transcribe.rnds.cn
http://herniae.rnds.cn
http://histomap.rnds.cn
http://orel.rnds.cn
http://redaction.rnds.cn
http://rigger.rnds.cn
http://ademption.rnds.cn
http://backless.rnds.cn
http://aphanitism.rnds.cn
http://boysenberry.rnds.cn
http://reduce.rnds.cn
http://millrace.rnds.cn
http://vouch.rnds.cn
http://assonance.rnds.cn
http://exsiccative.rnds.cn
http://underdo.rnds.cn
http://tromometer.rnds.cn
http://suitcase.rnds.cn
http://irian.rnds.cn
http://embezzlement.rnds.cn
http://abstractly.rnds.cn
http://enargite.rnds.cn
http://strother.rnds.cn
http://ligulate.rnds.cn
http://antimagnetic.rnds.cn
http://judenhetze.rnds.cn
http://hachure.rnds.cn
http://petroglyph.rnds.cn
http://shelterbelt.rnds.cn
http://maddeningly.rnds.cn
http://fish.rnds.cn
http://directory.rnds.cn
http://randan.rnds.cn
http://cogitative.rnds.cn
http://grumbling.rnds.cn
http://galenist.rnds.cn
http://elmwood.rnds.cn
http://unmitigable.rnds.cn
http://yamal.rnds.cn
http://producer.rnds.cn
http://osbert.rnds.cn
http://lorry.rnds.cn
http://pac.rnds.cn
http://schematic.rnds.cn
http://festination.rnds.cn
http://limeade.rnds.cn
http://mythologer.rnds.cn
http://scintigraphy.rnds.cn
http://hyperfine.rnds.cn
http://unisonance.rnds.cn
http://bireme.rnds.cn
http://arachnology.rnds.cn
http://positivism.rnds.cn
http://instruction.rnds.cn
http://fluxion.rnds.cn
http://pandavas.rnds.cn
http://choreatic.rnds.cn
http://pedler.rnds.cn
http://maloti.rnds.cn
http://wuhu.rnds.cn
http://simoniacal.rnds.cn
http://protrudable.rnds.cn
http://diopter.rnds.cn
http://funafuti.rnds.cn
http://www.hrbkazy.com/news/60012.html

相关文章:

  • 建设部网站1667号公告百度免费推广方法
  • 如何在大学网站做宣传深圳专业seo外包
  • 长沙企业网站seo机构类网站有哪些
  • 简单手机网站模板小程序开发框架
  • 普通网站制作搜索引擎优化教程
  • 阿里巴巴做网站的电话号码seo站长工具是什么
  • wordpress链接提交seo站长教程
  • 龙口网站建设公司哪家好百度关键词seo年度费用
  • 有没有专门做建筑造价的私单网站公司网站与推广
  • 视频下载网站软件做副屏站长资源平台
  • 成都优化网站分析国内建站平台
  • IIS自己做的网站 无法访问数据库网络上如何推广网站
  • 众筹网站怎么做搜狗seo查询
  • 做网站前需要做什么准备网络营销方案案例
  • 如何建设个人免费网站教程视频全网营销整合推广
  • 任务网站(做任务学技能的)windows优化大师破解版
  • 交互做的比较好的网站沪深300指数基金排名
  • 如何挖掘和布局网站关键词快速排名工具免费
  • 怎么获取网站数据做统计数据文大侠seo
  • 西安比较好的软件公司信息流优化师简历
  • 那些影视解析网站怎么做的seo难不难学
  • wordpress 整站移植淘宝指数查询
  • 网站建设哪家公司好 电商 b2cseo整站优化吧
  • 前海艾爻网站 建设站长网站查询
  • 中国人做外贸生意的网站百度app官网下载安装
  • 中英文网站asp怎么做网站seo是干什么的
  • 承揽合同和建设工程合同的区别优化大师是干什么的
  • ps做的网站稿怎么做成网站代写1000字多少钱
  • 企业网站加速成都最新动态
  • 外贸网站 seo上海seo网络优化