| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 设计模式:观察者模式和监听器模式 -> 正文阅读 |
|
[Java知识库]设计模式:观察者模式和监听器模式 |
最近有个需求,大概是想用一下观察者模式/或者是监听器模式,来实现一下。那问题来了什么是观察者模式,什么是监听器模式?两者之间有哪些联系和不同。具体实现是什么样的,那就听我讲解一下。 观察者模式和监听器模式的组成首先做一个总结,监听器模式实际上是在观察者模式的基础上进一步的封装。 首先是观察者模式,观察者模式分为两部分,观察者Observer和被观察者。观察者根据被观察者作为事件源,当执行逻辑涉及到触发逻辑,调用观察者的相关逻辑。 监听器相对来说多了个事件event,根据事件去监听。相当于是三部分EventSource事件源(有的地方也叫做register注册中心),Event事件(创建事件调动监听逻辑),Listener(监听器); 我这里借了一个别人的图: 观察者和监听器的具体实现代码的地址我放在我的github上: girhub:monitor和observer对应的实现,监听器那个模式由于是接口不是抽象类,可能有的idea会报错,但是可以执行,有时间我再修改一版 观察者:对应的是两部分Subject和Observer,一个是主体,观察者类似订阅者一样去订阅自己的主题。 被观察者或者说是主题的接口以及它的实现类
被观察者实现类
注意里面的几个方法,后面对比监听者也用的到。 观察者抽象类:之所以是抽象类是方便扩展实现不同类型的观察者
观察者A实例
我们观察一下观察者,觉得只分成两部分,能不能做个扩展对应触发观察者逻辑的部分能不能拿出来,这样迄不是扩展性更强。 当然可以监听器,就是单独出来一个事件,观察者根据事件的创建直接出发逻辑,看起来好像是在监听一样,听到消息就要去报告一样. 以下是监听器的代码 监听器的事件源,它对应的是观察者的被观察者的一部分,包括注册,维护观察者/监听器列表等。
事件,其实可以看作是一个抽象出来的监视对象,当监视对象创建出来就会,有对应的监视器采取相关的动作,这里我用的是,“地瓜,地瓜,我是土豆,我听到了!”,这种耳熟能详的暗号来做例子,地瓜可以监视土豆,是不是茄子也可以,这是当然的。 以下是监视器的代码:
那现在我们缺一个被监视的土豆对象,这个被监视的对象就是我们的Event事件
spring的监视器spring也是自带监视器,不管是注解@EventListener还是实现ApplicationListener接口,实际都是你去继承实现人家定的模式。 当然他们刚开始是有区别的,有的是后置处理器处理的,有的是直接接口的实现类,但最后的去处都是spring的多播放器然后再到applicationListeners管理雕鹰 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 0:31:18- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |