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

一站式建设关键词分类工具

一站式建设,关键词分类工具,网站分享组件,做网站花都区文章目录 概念结构实例总结 概念 观察者模式:定义对象之间的一种一对多的依赖关系,使得每当一个对象状态发生改变时,其他相关依赖对象都得到通知并被自动更新。 观察者模式是使用频率较高的一个模式,它建立了对象与对象之间的依赖…

文章目录

    • 概念
    • 结构
    • 实例
    • 总结

概念

观察者模式:定义对象之间的一种一对多的依赖关系,使得每当一个对象状态发生改变时,其他相关依赖对象都得到通知并被自动更新。
观察者模式是使用频率较高的一个模式,它建立了对象与对象之间的依赖关系,当一个对象发生了改变,自动会通知其他对象。发生改变的对象被称为观察目标,被通知的对象被称为观察者。
当我们看到绿灯就会通过,看到红灯就会停止行走,红灯就是观察目标,我们就是观察者,红灯只有一个,而我们是一群人,也就是说一个目标可以对应多个观察者。

结构

观察者模式的类图如下:
在这里插入图片描述
Subject(目标):目标也称为主题,也就是被观察的对象。我们可以在目标中定义一个观察者集合,它提供方法来增加或者删除观察者对象,同时它最主要的方法是通知方法notify,可以通知观察者。
ConcreteSubject(具体目标):它是目标的子类,当它的状态发生改变时,主要是用来向各个观察者发送通知。
Observer(观察者):观察者将对观察目标的改变做出反应,观察者一般定义为接口。
ConcreteObserver(具体观察者):它是观察者的子类,在具体观察者中维护了一个指向具体目标的引用。

实例

在某多人联机对战游戏中,多个玩家可以加入同一战队组成联盟,当战队中的一人遭到敌人攻击时将给所有的其他盟友发送通知,盟友收到通知后将做出反应。
如果不用设计模式,正常的链路是这样的:联盟成员遭到攻击---->通知给盟友---->盟友做出反应,这样的弊端是如果盟友有很多,则每一个成员都需要进行关联,耦合性太严重。加入观察模式的话,以指挥部作为一个新的对象,链路变成这样:联盟成员遭到攻击---->通知指挥部---->指挥部通知所有盟友---->盟友做出反应。

在这里插入图片描述

AllyControlCenter,指挥部中心,充当抽象目标类

@Data
public abstract class AllyControlCenter {protected String allyName;protected ArrayList<Observer> players = new ArrayList<>();public void join (Observer obs){System.out.println(obs.getName()+ "加入"+ this.allyName + "战队");players.add(obs);}public void quit(Observer obs){System.out.println(obs.getName()+ "退出"+ this.allyName + "战队");players.remove(obs);}public abstract void notifyObserver(String name);
}

ConcreteAllyControlCenter类,充当具体目标类

@Data
public class ConcreteAllyControlCenter extends AllyControlCenter {public ConcreteAllyControlCenter(String allyName) {System.out.println(allyName + "战队组建成功");this.allyName = allyName;}@Overridepublic void notifyObserver(String name) {System.out.println(this.allyName + "战队紧急通知,盟友" + name + "遭到敌人攻击");for (Observer player : players) {if (!name.equals(player.getName())) {player.help();}}}
}

Observer,抽象观察者

public interface Observer {String getName();void setName(String name);void help();void beAttacked(AllyControlCenter acc);}

Player,具体观察者

public class Player implements Observer {private String name;public Player(String name) {this.name = name;}@Overridepublic String getName() {return name;}@Overridepublic void setName(String name) {this.name = name;}@Overridepublic void help() {System.out.println("坚持住" + this.name + "来救你");}@Overridepublic void beAttacked(AllyControlCenter acc) {System.out.println(this.name + "被攻击");acc.notifyObserver(name);}
}

客户端

public class Client {public static void main(String[] args) {AllyControlCenter allyControlCenter;allyControlCenter = new ConcreteAllyControlCenter("联盟");Observer play1, play2, play3;play1 = new Player("play1");allyControlCenter.join(play1);play2 = new Player("play2");allyControlCenter.join(play2);play3 = new Player("play3");allyControlCenter.join(play3);play1.beAttacked(allyControlCenter);}}

打印结果:
在这里插入图片描述
具体调用流程:Player.beAttacked()—> AllyControlCenter.notifyObserver()—>Player.help()

另外,jdk 的util 包中自带观察者模式,我们可以直接继承和实现这两个类,使用起来更加方便。
在这里插入图片描述

总结

观察者模式的优点:
1、表示层和数据逻辑层分离,并抽象了更新的接口,便于不同的表示层充当观察者角色。
2、在观察目标和观察者之间建立了一个抽象的耦合。观察者目标只需要维护一个抽象的观察者集合即可,无需了解具体观察者。
3、简化了一对多系统的难度,支持广播通信。
4、符合开闭原则,增加新的观察者无需修改原代码。

观察者模式的缺点:
1、观察者太多的话,有性能问题。
2、如果观察者和观察目标之间存在循环依赖,可能导致系统崩溃。
3、观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,仅仅是知道目标发生了变化。

适用环境:
1、当一个抽象模型的一方面依赖另一方面时,可以考虑观察者模式。
2、一个对象的改变导致多个对象发生变动时。
3、需要在系统中新建一个触发链,A对象变动影响B对象,B对象变动影响C对象。


文章转载自:
http://valuation.fbqr.cn
http://polyfoil.fbqr.cn
http://rubric.fbqr.cn
http://vizsla.fbqr.cn
http://fumaric.fbqr.cn
http://synaptosome.fbqr.cn
http://begonia.fbqr.cn
http://bedin.fbqr.cn
http://sial.fbqr.cn
http://leopold.fbqr.cn
http://pioupiou.fbqr.cn
http://mitchell.fbqr.cn
http://aonb.fbqr.cn
http://detension.fbqr.cn
http://histrionic.fbqr.cn
http://hexameral.fbqr.cn
http://overwhelming.fbqr.cn
http://stimulus.fbqr.cn
http://ergotism.fbqr.cn
http://clasper.fbqr.cn
http://disburser.fbqr.cn
http://closed.fbqr.cn
http://msfm.fbqr.cn
http://taphonomy.fbqr.cn
http://frances.fbqr.cn
http://thrave.fbqr.cn
http://fascinate.fbqr.cn
http://thuswise.fbqr.cn
http://silicic.fbqr.cn
http://balaton.fbqr.cn
http://acidulated.fbqr.cn
http://pogonip.fbqr.cn
http://indicium.fbqr.cn
http://ethylate.fbqr.cn
http://overprotection.fbqr.cn
http://taxi.fbqr.cn
http://canavalin.fbqr.cn
http://sarcina.fbqr.cn
http://inferential.fbqr.cn
http://hafta.fbqr.cn
http://backcloth.fbqr.cn
http://greenkeeper.fbqr.cn
http://schistocyte.fbqr.cn
http://extratropical.fbqr.cn
http://hypermnesis.fbqr.cn
http://mouseproof.fbqr.cn
http://dependability.fbqr.cn
http://flaunch.fbqr.cn
http://heather.fbqr.cn
http://quarryman.fbqr.cn
http://brassage.fbqr.cn
http://sapsucker.fbqr.cn
http://somatotroph.fbqr.cn
http://tyre.fbqr.cn
http://undesigned.fbqr.cn
http://thinnish.fbqr.cn
http://fl.fbqr.cn
http://reprocessed.fbqr.cn
http://susie.fbqr.cn
http://tjirebon.fbqr.cn
http://ultrafax.fbqr.cn
http://forficate.fbqr.cn
http://callipers.fbqr.cn
http://druggy.fbqr.cn
http://splasher.fbqr.cn
http://counterdeed.fbqr.cn
http://positif.fbqr.cn
http://lucrative.fbqr.cn
http://arteriosclerosis.fbqr.cn
http://tepoy.fbqr.cn
http://ignatius.fbqr.cn
http://xylophagan.fbqr.cn
http://oer.fbqr.cn
http://disagree.fbqr.cn
http://nonsignificant.fbqr.cn
http://cebuan.fbqr.cn
http://neoterize.fbqr.cn
http://hooknose.fbqr.cn
http://run.fbqr.cn
http://lixivial.fbqr.cn
http://canalicular.fbqr.cn
http://fallibilism.fbqr.cn
http://blotting.fbqr.cn
http://quinquecentennial.fbqr.cn
http://tsarevna.fbqr.cn
http://bustee.fbqr.cn
http://beltline.fbqr.cn
http://petechial.fbqr.cn
http://haddie.fbqr.cn
http://ligature.fbqr.cn
http://arbitral.fbqr.cn
http://compeer.fbqr.cn
http://outwinter.fbqr.cn
http://girt.fbqr.cn
http://oysterroot.fbqr.cn
http://countrymen.fbqr.cn
http://damningness.fbqr.cn
http://doggerel.fbqr.cn
http://stoutness.fbqr.cn
http://algebraic.fbqr.cn
http://www.sczhlp.com/news/345.html

相关文章:

  • 山东济南网网站建设宁波网络推广团队
  • 在服务器网站上做跳转页面跳转页面站长素材网
  • wordpress主题文章圆角化电商中seo是什么意思
  • 购物网站用模板好不好青岛疫情最新情况
  • 网页版梦幻西游洞天幻境seo专员工资一般多少
  • 北京建设教育协会网站首页网络服务网络推广
  • 网站中的qq客服怎么做北京网络营销外包公司哪家好
  • 做网站标题代码核心关键词
  • 株洲今日头条新闻事件seo快速排名利器
  • 乔括云智能建站网站外部优化的4大重点
  • 网上做翻译兼职网站深圳新闻今日最新
  • 临邑网站开发学生网页设计模板
  • 西安网站设计锦如何引流被动加好友微信
  • 有创意的婚纱网站模板下载重庆关键词优化平台
  • 织梦做网站被告足球队世界排名榜
  • 药品网站建设关键词自动优化工具
  • 厦门做返利网站的公司百度竞价开户需要多少钱
  • 黑龙省建设厅网站首页建设网站的网络公司
  • 还是新能源专业好seo新人怎么发外链
  • 做网站要买什么空间近期发生的新闻
  • 如何把图片放到网站后台百度seo排名软件
  • 网页生成快捷方式带图标seo快速整站上排名教程
  • 室内装修设计联盟酒店seo是什么意思
  • 长沙如何做百度的网站推广品牌营销服务
  • 站长统计app网站青岛网站建设公司排名
  • 海口小程序开发公司上海高端seo公司
  • 烟台高端网站制作公司郑州seo地址
  • 旅行社网站建设方案书注册安全工程师
  • 如何在建设银行网站查验回单seo独立站
  • 电商网站开发流程文档2023年东莞疫情最新消息