八卦新闻排版图(新闻八卦我在行(观察者模式) - 第357篇)

wufei123 发布于 2024-01-04 阅读(194)

关闭观看更多更多正在加载正在加载退出全屏视频加载失败,请刷新页面再试

刷新

视频详情 相关历史文章(阅读本文前,您可能需要先看下之前的系列👇)全国最全的SpringBoot系列之四SpringBoot框架开发的优秀的项目「值得收藏学习」-第335

1天学会别人1个月学会的设计模式大话设计模式之爱你一万年:设计模式基本概念:GoF的23种设计模式的分类和功能设计模式的六大原则我的女朋友只有你一个:单例模式的基本概念我的女朋友只有你一个:单例模式的实

现-懒汉模式我的女朋友只有你一个:单例模式的实现-饿汉/静态/枚举我想让你坐在宝马里笑:工厂模式概念和无工厂时代工厂模式之简单工厂模式工厂模式之抽象工厂模式工厂模式在源码中的应用和工厂模式的总结无桥接模式之消息发送 :桥接模式:结婚发消息不是一件简单的事情

桥接模式之消息发送:结婚发消息不是一件简单的事情 - 第353篇享元模式:共享女友 - 第355篇关闭观看更多更多正在加载正在加载退出全屏视频加载失败,请刷新页面再试

刷新

视频详情

我女朋友喜欢八卦,于是我每天就收集逗她玩。(1)今年北京大学校花出炉,神似某个明星(2)老板当众指责员工“长得丑”(3)和AI结婚,需要对其忠诚吗我女朋友在我的八卦里,每天都是笑容满面。

后来,我弟弟,我姐姐知道我每天会收集八卦信息,就说:反正一个人看是看,两个人看也是,你顺便也发一份给我们为了管理谁需要,谁不需要,我就说你们有需要的就订阅我把,有订阅我的,我就发送给他这就是观察者模式,和发布订阅有点相似。

一、观察者模式(Observer)基本概念观察者模式就如一个聊天室,当你需要收到聊天室的消息时,你就注册成为聊天室的成员,当聊天室有信息更新时,就会传到你那去当你不需要接收聊天室的信息时,可以注销掉,退出聊天室。

又例如,天气观测站和气象报告板的关系但报告板想获取观测站的数据,可以注册加入到观测站的观察者列表中,这就可以使观测站有数据更新时,自动传给气象报告板1.1 定义观察者模式(Observer Pattern)定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。

这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己1.2 类图

1.3 主要角色(1)抽象观察者角色(Observer):为所有的具体观察者定义一个接口,在得到主题通知时更新自己(2)具体观察者角色(ConcreteObserver):实现抽象观察者角色所需要的更新接口,一边使本身的状态与制图的状态相协调。

(3)抽象被观察者角色(Subject):也就是一个抽象主题,它把所有对观察者对象的引用保存在一个集合中,每个主题都可以有任意数量的观察者抽象主题提供一个接口,可以增加和删除观察者角色一般用一个抽象类和接口来实现。

(4)具体被观察者角色(ConcreteSubject):也就是一个具体的主题,在集体主题的内部状态改变时,所有登记过的观察者发出通知二、观察者模式之订阅八卦这么多人都觉得我的八卦有趣,那么我就得管理这些人,设计模式之《观察者模式》就满足了我的需求。

2.1 类图

2.2 编码2.2.1 抽象观察者角色(Observer)抽象观察者角色(Observer):为所有的具体观察者定义一个接口,在得到主题通知时更新自己新闻观察者NewsObserver:package com.kfit.observer.news;

/** * 新闻观察者 * * 抽象观察者角色(Observer):为所有的具体观察者定义一个接口,在得到主题通知时更新自己 * * @author 悟纤「公众号SpringBoot」 * @date 2020-12-03

* @slogan 大道至简 悟在天成 */publicinterfaceNewsObserver{voidupdate(String msg);}2.2.2 具体观察者角色(ConcreteObserver)

具体观察者角色(ConcreteObserver):实现抽象观察者角色所需要的更新接口,一边使本身的状态与制图的状态相协调具体观察者角色GirlFriend:package com.kfit.observer.news;。

/** * 具体观察者角色 * * @author 悟纤「公众号SpringBoot」 * @date 2020-12-03 * @slogan 大道至简 悟在天成 */publicclassGirlFriend

implementsNewsObserver{@Overridepublicvoidupdate(String msg){ System.out.println("女朋友接收到信息:"+msg);

}}抽象被观察者角色(Subject):也就是一个抽象主题,它把所有对观察者对象的引用保存在一个集合中,每个主题都可以有任意数量的观察者抽象主题提供一个接口,可以增加和删除观察者角色一般用一个抽象类和接口来实现。

新闻主题抽象NewsSubject:package com.kfit.observer.news;import java.util.Observer;/** * 新闻主题抽象 * * @author 悟纤「公众号SpringBoot」

* @date 2020-12-03 * @slogan 大道至简 悟在天成 */publicinterfaceNewsSubject{voidaddObserver(NewsObserver newsObserver)

;voidremoveObserver(NewsObserver newsObserver);voidnotify(String msg);}2.2.3 具体被观察者角色(ConcreteSubject)

具体被观察者角色(ConcreteSubject):也就是一个具体的主题,在集体主题的内部状态改变时,所有登记过的观察者发出通知我就是收集消息,然后将信息通知到各个观察者:package com.kfit.observer.news;。

import java.util.ArrayList;import java.util.List;/** * 具体被观察者角色(ConcreteSubject):也就是一个具体的主题, * 在集体主题的内部状态改变时,所有登记过的观察者发出通知。

* * @author 悟纤「公众号SpringBoot」 * @date 2020-12-03 * @slogan 大道至简 悟在天成 */publicclassMeimplementsNewsSubject

{private List newsObservers = new ArrayList<>();@OverridepublicvoidaddObserver(NewsObserver newsObserver)

{ newsObservers.add(newsObserver); }@OverridepublicvoidremoveObserver(NewsObserver newsObserver)

{ newsObservers.remove(newsObserver); }@Overridepublicvoidnotify(String msg){for(NewsObserver newsObserver:newsObservers){

newsObserver.update(msg); } }}2.3 测试到这里可以测试一下了:package com.kfit.observer.news;/**

* 测试观察者模式 * * @author 悟纤「公众号SpringBoot」 * @date 2020-12-03 * @slogan 大道至简 悟在天成 */publicclassClient{public

staticvoidmain(String[] args){//我准备一下 NewsSubject me = new Me();//女朋友、妹妹 NewsObserver girlFriend =

new GirlFriend(); NewsObserver sister = new Sister();//添加到观察者列表中 me.addObserver(girlFriend);

me.addObserver(sister);//我找呀找... 找到了一条八卦... me.notify("今年北京大学校花出炉,神似某个明星");//妹妹说,最近事情很多,没时间看了,就不要发给我了

me.removeObserver(sister);//我找呀找,找到了一条 System.out.println(); me.notify("老奶奶过马路到底要不要扶"

); }}执行结果:

越分享越成长,越分享越自信  通过本文,你最大的是收获是什么?请在留言区分享你的收获。关闭观看更多更多正在加载正在加载退出全屏视频加载失败,请刷新页面再试

刷新

视频详情 我就是我,是颜色不一样的烟火我就是我,是与众不同的小苹果à悟空学院:https://t.cn/Rg3fKJD学院中有SpringBoot相关的课程!点击「阅读原文

」进行查看!SpringBoot视频:http://t.cn/A6ZagYTiSpringBoot交流平台:https://t.cn/R3QDhU0SpringSecurity5.0视频:http://

t.cn/A6ZadMBeShardingJDBC分库分表:http://t.cn/A6ZarrqS分布式事务解决方案:http://t.cn/A6ZaBnIrJVM内存模型调优实战:http://t.

cn/A6wWMVqGSpring入门到精通:https://t.cn/A6bFcDh4大话设计模式之爱你:https://dwz.cn/wqO0MAy7

亲爱的读者们,感谢您花时间阅读本文。如果您对本文有任何疑问或建议,请随时联系我。我非常乐意与您交流。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。