目录
一、概述
我们都多少都遇到过一些场景,需要关注一件事物的状态变化,当状态发生变化时进行相应的操作或处理。
1、实现对状态的实时监测一般就两种思路:
(1)一种轮训查看,每隔一段时间查看一些状态;
(2)另一种,就是什么时候发生状态变化了,让事物主动发起通知或广播。
2、常见的场景有:
- 比如区块链的比特币发生一笔交易时,发生交易的节点要向其他节点进行广播,其他节点进行计算和记录。
- 微信朋友圈里发一条动态实现通知到所有好友。
- 商品降价后通知到所有关注的消费者,
3、观察者的核心思路与角色
观察者模式的核心思路就是主动广播通知。维护一个观察者的列表,即被通知者的列表,然后根据事件源的某些状态变化,触发通知操作。然后观察者接收到通知后做出相应的操作。
观察者模式中涉及3个角色:
- Source:事件源,或者叫被观察者、主题对象。
- Observer:观察者,也是被通知者,消息接收处理者。
- Event:事件或消息。一般由Source被观察者发起事件,然后传递到Obsever
4、定义:
定义了对象之间的一对多依赖,让多个观察者对象同时监听某一个主题对象,当主题对象发生变化时,它的所有依赖者(观察者)都会收到通知并更新。
二、实际例子与代码实现
主要介绍三个小例子,分别是课程产生问题提问通知到老师、小孩睡醒通知到父母、还有Java JWT中的Button点击事件监听与响应。
详细的代码在这里:
下面是核心介绍:
1、课程产生问题提问通知到老师
该例子应用了JDK自带的观察者模式的支持,java.util.Observable可以被Source事件源对象类继承,用于实现通知列表管理及通知动作触发;java.util.Observer可以被具体的O