Java观察者模式实例代码分析
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇"Java观察者模式实例代码分析"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"J
千家信息网最后更新 2026年11月03日Java观察者模式实例代码分析
这篇"Java观察者模式实例代码分析"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"Java观察者模式实例代码分析"文章吧。
优点
1.观察者和被观察者是抽象耦合的。
2.建立一套触发机制。
缺点
1.如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。
2.如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃。
3.观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。
使用场景
一个抽象模型有两个方面,其中一个方面依赖于另一个方面。将这些方面封装在独立的对象中使它们可以各自独立地改变和复用。
一个对象的改变将导致其他一个或多个对象也发生改变,而不知道具体有多少对象将发生改变,可以降低对象之间的耦合度。
一个对象必须通知其他对象,而并不知道这些对象是谁。
需要在系统中创建一个触发链,A对象的行为将影响B对象,B对象的行为将影响C对象……,可以使用观察者模式创建一种链式触发机制。
注意事项
1.JAVA 中已经有了对观察者模式的支持类。
2.避免循环引用。
3.如果顺序执行,某一观察者错误会导致系统卡壳,一般采用异步方式。
一、实现方式
1、观察者抽象类
package com.asurplus.common.observe;/** * 观察者 */public abstract class Observer { protected Subject subject; /** * 发布事件 */ public abstract void update();}2、第一个观察者
package com.asurplus.common.observe;import lombok.extern.slf4j.Slf4j;@Slf4jpublic class Observer1 extends Observer { public Observer1(Subject subject) { this.subject = subject; this.subject.attach(this); } @Override public void update() { log.info("观察者 1 收到通知:{}", this.subject.getState()); }}3、第二个观察者
package com.asurplus.common.observe;import lombok.extern.slf4j.Slf4j;@Slf4jpublic class Observer2 extends Observer { public Observer2(Subject subject) { this.subject = subject; this.subject.attach(this); } @Override public void update() { log.info("观察者 2 收到通知:{}", this.subject.getState()); }}4、第三个观察者
package com.asurplus.common.observe;import lombok.extern.slf4j.Slf4j;@Slf4jpublic class Observer3 extends Observer { public Observer3(Subject subject) { this.subject = subject; this.subject.attach(this); } @Override public void update() { log.info("观察者 3 收到通知:{}", this.subject.getState()); }}5、定义主题
package com.asurplus.common.observe;import java.util.ArrayList;import java.util.List;/** * 主题 */public class Subject { /** * 观察者列表 */ private List observers = new ArrayList<>(); /** * 标志 */ private int state; public int getState() { return state; } /** * 标识被改变 * * @param state */ public void setState(int state) { this.state = state; // 通知所有观察者 notifyAllObservers(); } /** * 添加进接收者列表 * * @param observer */ public void attach(Observer observer) { observers.add(observer); } /** * 通知所有人被改变 */ public void notifyAllObservers() { for (Observer observer : observers) { observer.update(); } }} 类似于消息发布一样,有多个接收者,当标志位被改变的时候,通知多个接收者。
二、测试
package com.asurplus.common.observe;public class TestMain { public static void main(String[] args) { // 创建主题 Subject subject = new Subject(); // 添加观察者 new Observer1(subject); new Observer2(subject); new Observer3(subject); // 改变标志 subject.setState(10); }}输出结果
可以看出,三个接收者都收到了事件通知,从而实现了我们的观察者模式。
以上就是关于"Java观察者模式实例代码分析"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。
观察
观察者
对象
模式
内容
接收者
方面
目标
代码
实例
分析
主题
之间
多个
机制
标志
系统
循环
三个
事件
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技图片
西安纸贵互联网科技有限公司
蓝思科技飞鸽互联网
科技赋能下的互联网金融
沃里互联网科技
中国互联网金融科技基金
科技与互联网的利与弊
互联网科技博主是什么意思
华服互联网科技官网
厦门比较好的科技互联网公司
广州新华互联网科技学校电竞方面
为客找房互联网科技公司怎么样
电子商务与互联网科技的关系
工业互联网科技成果转化
有人说阿里系是互联网科技企业
江苏互联网科技小贷
万物互联网智能科技
科技互联网公司两年变化
河南商务圈互联网科技有限公司
互联网科技企业文化
智能科技公司是互联网公司吗
苏州互联网科技贷款公司
碳银互联网科技有限公司
996高科技互联网公司
互联网新科技动漫ppt素材
互联网公司黑科技创始人
用友工业互联网科技发展
四川互联网展示科技馆设计
互联网科技数字货币
上海创道互联网络科技有限公司