论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
什么是观察者设计模式?
什么是观察者设计模式?
兜兜零元
金牌会员
|
2024-5-17 14:48:23
|
显示全部楼层
|
阅读模式
楼主
主题
875
|
帖子
875
|
积分
2625
什么是观察者
观察者模式的重要角色包罗:
主题(Subject): 也称为被观察者或可观察对象。它维护了一系列观察者对象,并提供方法用于注册、删除和通知观察者。当主题的状态发生改变时,它会通知所有注册的观察者。
观察者(Observer): 观察主题的对象。观察者界说了一个更新方法,主题在状态改变时会调用这个方法来通知观察者。观察者可以根据主题的通知来执行相应的操纵。
观察者的应用
观察者模式在实际应用中常常用于处置惩罚事件驱动的编程场景,如图形用户界面(GUI)开发、消息通报系统等。通过观察者模式,可以实现对象之间的解耦,进步系统的机动性和可维护性。
在Spring Framework中,观察者模式的应用非常广泛,尤其在Spring的事件驱动机制中。Spring的事件机制允许对象在特定事件发生时发布事件,并允许其他对象注册为监听器以吸收这些事件。这与观察者模式的概念非常相似,其中事件源就是观察者模式中的主题,而事件监听器就是观察者。
应用步伐事件
: Spring允许应用步伐发布自界说事件,并提供了ApplicationEvent和ApplicationListener接口。应用步伐可以创建自界说事件类,并在需要时发布这些事件。其他对象可以实现ApplicationListener接口并注册为监听器,以吸收并处置惩罚这些事件。
Spring MVC事件: 在Spring MVC中,可以使用 ApplicationEventPublisher 接口发布自界说事件,并通过
@EventListener
注解或实现 ApplicationListener 接口的方式来处置惩罚这些事件。这使得在MVC架构中进行解耦和处置惩罚事件变得更加轻易。
怎样实现
日常中比较经典的实例场景 , 举个例子,如博客园的文章订阅, 当关注的作者发布了新的文章后,关注其的粉丝就会收到消息通知,这里将代码拆出来如下。
import java.util.ArrayList;
import java.util.List;
// 主题接口
interface Subject {
void registerObserver(Observer observer);
void removeObserver(Observer observer);
void notifyObservers(String news);
}
// 观察者接口
interface Observer {
void update(String news);
}
// 新闻发布者
class NewsPublisher implements Subject {
private List<Observer> observers = new ArrayList<>();
@Override
public void registerObserver(Observer observer) {
observers.add(observer);
}
@Override
public void removeObserver(Observer observer) {
observers.remove(observer);
}
@Override
public void notifyObservers(String news) {
for (Observer observer : observers) {
observer.update(news);
}
}
public void publishNews(String news) {
System.out.println("发布新闻: " + news);
notifyObservers(news);
}
}
// 观察者 - 读者
class Reader implements Observer {
private String name;
public Reader(String name) {
this.name = name;
}
@Override
public void update(String news) {
System.out.println(name + " 收到新闻: " + news);
}
}
public class ObserverPatternExample {
// 创建新闻发布者
NewsPublisher publisher = new NewsPublisher();
// 创建两个观察者(读者)
Observer reader1 = new Reader("小明");
Observer reader2 = new Reader("小红");
// 注册观察者
publisher.registerObserver(reader1);
publisher.registerObserver(reader2);
// 发布新闻
publisher.publishNews("Java 21发布了!");
publisher.publishNews("Spring Framework 更新了!");
// 读者取消订阅
publisher.removeObserver(reader2);
// 再次发布新闻
publisher.publishNews("小米 su7 上线了,雷总为你开车门,快行动起来吧!");
}
}
复制代码
步伐运行日志如下
发布新闻: Java 21发布了!
小明 收到新闻: Java 21发布了!
小红 收到新闻: Java 21发布了!
发布新闻: Spring Framework 更新了!
小明 收到新闻: Spring Framework 更新了!
小红 收到新闻: Spring Framework 更新了!
发布新闻: 小米 su7 上线了,雷总为你开车门,快行动起来吧!
小明 收到新闻: 小米 su7 上线了,雷总为你开车门,快行动起来吧!
复制代码
结语
这里介绍观察者,是盼望从易于理解的概念开始对 Reactive Programing 的理解,在相应式编程中多数基于观察者模式头脑演变而来,如在
Reactor
中,订阅者(Subscriber)订阅了数据流(Publisher),并在数据流中的元素发生变革时吸收通知。
通知机制: 在观察者模式中,主题状态的变革会触发通知,通知会被发送给所有注册的观察者。在Reactor中,数据流中的元素发生变革时会触发通知,通知会被发送给所有订阅了该数据流的订阅者。
事件驱动编程: 观察者模式和 Reactor 都支持事件驱动的编程模型。在观察者模式中,事件源(主题)发生事件(状态变革),并通知观察者。在 Reactor 中,事件(数据元素)在流中通报,并且订阅者可以对这些事件进行相应式地处置惩罚。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
兜兜零元
金牌会员
这个人很懒什么都没写!
楼主热帖
Oracle调度器Scheduler
数据库的建立、增、删、改、查 ...
clang-format的使用
深入解析kubernetes中的选举机制 ...
【黄啊码】MySQL入门—4、掌握这些数据 ...
MySQL安装配置
【黄啊码】MySQL入门—5、数据库小技巧 ...
V Rising 服务器搭建
2万多条健康网站文章大全ACCESS\EXCEL ...
为什么用Redis做排行榜?
标签云
存储
挺好的
服务器
快速回复
返回顶部
返回列表