2023-02-22  阅读(30)
原文作者:键盘林 原文地址:https://blog.csdn.net/qq_37909508/category_8976362.html

观察者模式

定义:定义了对象之间的一对多依赖,让多个观察者对象同时监听某一个主题对象,当主题对象发送变化时,它的所有依赖者(观察者)都会收到通知并更新

类型:行为型

适用场景:

关联行为场景,建立一套触发机制

优点:

观察者和被观察者之间建立一个抽象的耦合

观察者模式支持广播通信

缺点:

观察者之间有过多的细节依赖。太高时间消耗及程序复杂度

使用要得当,要避免循环调用

Coding:

创建Course:

202302222108587411.png

创建Qustion类

202302222109000352.png

创建Teacher类(Teacher是观察者,Course是被观察者)

202302222109011433.png

JDK中对于被观察者提供了Observable类

202302222109021294.png

进入到Observable

202302222109032975.png

不仅是使用了线程安全的Vector,而且它内部的很多方法也同样时线程安全的

202302222109049976.png

202302222109068017.png

通知观察者

202302222109082418.png

202302222109097139.png

回到Course类中,编写productQuestion()方法

2023022221091139210.png

查看setChanged()方法

2023022221091272211.png

将问题发送给对应的观察者

2023022221091402212.png

让Teacher这个观察者实现Observer接口

2023022221091549213.png

进入到Observer,可以看到它只有一个方法

第一个参数o:被观察的对象

第二个参数arg:notifyObservers方法传过来的对象(也就是被观察者里面通过notifyObservers方法传递过来的参数)

2023022221091658314.png

2023022221091804515.png

继续编写update()方法

2023022221091921416.png

创建Test类

2023022221092046517.png

运行结果

2023022221092210518.png

查看当前UML类图

2023022221092320119.png

总结:观察者模式核心在于Observer和Observable两个接口将三个类联系起来

其主要业务逻辑在update()方法中进行处理。

在增加一个老师:

2023022221092470120.png

2023022221092614821.png

JDK中的应用 :

在java中有一个按钮,当我们按下之后,就会触发相应的事件,这就是监听,采用的也是观察者模式。

类Event

2023022221092809922.png

类RequestContextListener

2023022221092965823.png

进入到类ServletRequestListener

2023022221093178424.png

2023022221093379525.png


Java 面试宝典是大明哥全力打造的 Java 精品面试题,它是一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是一道道面试题,而是一套完整的 Java 知识体系,一套你 Java 知识点的扫盲贴。

它的内容包括:

  • 大厂真题:Java 面试宝典里面的题目都是最近几年的高频的大厂面试真题。
  • 原创内容:Java 面试宝典内容全部都是大明哥原创,内容全面且通俗易懂,回答部分可以直接作为面试回答内容。
  • 持续更新:一次购买,永久有效。大明哥会持续更新 3+ 年,累计更新 1000+,宝典会不断迭代更新,保证最新、最全面。
  • 覆盖全面:本宝典累计更新 1000+,从 Java 入门到 Java 架构的高频面试题,实现 360° 全覆盖。
  • 不止面试:内容包含面试题解析、内容详解、知识扩展,它不仅仅只是一份面试题,更是一套完整的 Java 知识体系。
  • 宝典详情:https://www.yuque.com/chenssy/sike-java/xvlo920axlp7sf4k
  • 宝典总览:https://www.yuque.com/chenssy/sike-java/yogsehzntzgp4ly1
  • 宝典进展:https://www.yuque.com/chenssy/sike-java/en9ned7loo47z5aw

目前 Java 面试宝典累计更新 400+ 道,总字数 42w+。大明哥还在持续更新中,下图是大明哥在 2024-12 月份的更新情况:

想了解详情的小伙伴,扫描下面二维码加大明哥微信【daming091】咨询

同时,大明哥也整理一套目前市面最常见的热点面试题。微信搜[大明哥聊 Java]或扫描下方二维码关注大明哥的原创公众号[大明哥聊 Java] ,回复【面试题】 即可免费领取。

阅读全文