news 2026/4/18 5:29:12

JAVA设计模式之观察者模式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JAVA设计模式之观察者模式

观察者模式应用场景

在我们开发的过程中,经常会遇到一些当什么什么事情发生的时候,然后做什么什么事。比如某种商品的物价上涨时会导致部分商家高兴,而消费者伤心。

代码示例

抽象被观察者类
package com.demo.test.observe.abs; import java.util.ArrayList; import java.util.List; public abstract class Subject { private List<Observe> observeList = new ArrayList<>(); public void attach(Observe observe){ this.observeList.add(observe); }; public void detach(Observe observe){ this.observeList.remove(observe); }; public void allNotify(){ for(Observe observe:observeList){ observe.update(); } } }
抽象观察者类
package com.demo.test.observe.abs; public abstract class Observe { public abstract void update(); }
具体被观察者类
package com.demo.test.observe; import com.demo.test.observe.abs.Subject; import java.util.List; public class SubjectA extends Subject { }
具体观察者1
package com.demo.test.observe; import com.demo.test.observe.abs.Observe; public class StudentObserve extends Observe { public void update(){ System.out.println("老师来了,快坐好"); } }
具体观察者2
package com.demo.test.observe; import com.demo.test.observe.abs.Observe; public class StudentBObserve extends Observe { @Override public void update() { System.out.println("老师来了,别吃了"); } }
客户端
package com.demo.test.observe; import com.demo.test.observe.abs.Observe; import com.demo.test.observe.abs.Subject; public class Client { public static void main(String[] args){ Subject subjectA = new SubjectA(); Observe studentObserve = new StudentObserve(); subjectA.attach(studentObserve); subjectA.attach(new StudentBObserve()); subjectA.allNotify(); } }

JAVA 自带的观察者类

被观察者
package com.demo.test.observe.javaObserve; import java.util.Observable; public class Subject1 extends Observable { public void change(){ setChanged(); //如果不执行setChanged,就不会调用update函数。 } }
观察者A
package com.demo.test.observe.javaObserve; import java.util.Observable; import java.util.Observer; public class ObserveA implements Observer { @Override public void update(Observable o, Object arg) { System.out.println("java 自带观察者:A"); } }
观察者B
package com.demo.test.observe.javaObserve; import java.util.Observable; import java.util.Observer; public class ObserveB implements Observer { @Override public void update(Observable o, Object arg) { System.out.println("java 自带观察者:B"); } }

客户端

package com.demo.test.observe.javaObserve; import java.util.Observable; import java.util.Observer; public class Client { public static void main(String[] args){ Subject1 subject = new Subject1(); Observer observerA = new ObserveA(); Observer observerB = new ObserveB(); subject.addObserver(observerA); subject.addObserver(observerB); //这一步主要调用里面的setChanged,否则update不执行。setChanged必须在Observable继承类内执行,因为它是protected修饰的。 subject.change(); subject.notifyObservers(); } }
© 著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务


喜欢的朋友记得点赞、收藏、关注哦!!!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 5:08:36

2024年VSCode最佳字体实战指南:10个真实案例

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个交互式案例展示平台&#xff0c;包含10种典型开发者画像&#xff08;如全栈工程师、数据科学家、游戏开发者等&#xff09;&#xff0c;每种画像展示其VSCode字体配置方案、…

作者头像 李华
网站建设 2026/4/18 5:09:28

WSL2+Ubuntu快速原型开发环境配置

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个WSL2 Ubuntu快速原型环境生成器&#xff0c;支持&#xff1a;1.多种开发场景预设(Web/ML/区块链等) 2.一键安装对应工具链 3.生成示例项目骨架 4.自动化测试配置 5.环境导出…

作者头像 李华
网站建设 2026/4/17 14:29:16

零基础玩转LLM:快马平台5分钟上手教程

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个面向新手的LLM入门教程项目&#xff1a;1.图文并茂的操作指引&#xff1b;2.预设5个简单有趣的LLM应用模板&#xff08;如聊天机器人、诗歌生成器等&#xff09;&#xff1…

作者头像 李华
网站建设 2026/4/12 2:13:16

10分钟搭建no-referrer策略测试环境

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个一键式测试环境生成工具&#xff0c;能够快速部署包含HTTPS和HTTP端点的测试网站&#xff0c;自动配置不同的referrer策略(包括no-referrer-when-downgrade)&#xff0c;并…

作者头像 李华
网站建设 2026/4/16 18:25:32

2017-2024年科技型中小企业名单数数据

数据简介 科技型中小企业是依托一定数量的科技人员从事科学技术研究开发活动&#xff0c;取得自主知识产权并将其转化为高新技术产品或服务&#xff0c;从而实现可持续发展的中小企业。 我国科技型中小企业对未来发展的意义重大&#xff0c;主要体现在推动创新驱动发展、促进…

作者头像 李华