当前位置: 首页 > news >正文

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(); } }
© 著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务


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

http://www.cnnetsun.cn/news/113432.html

相关文章:

  • 二叉排序树的构建与遍历
  • AI风险行为识别系统开发:给安全防护装个“智能哨兵”
  • After Effects Roto Brush 3.0:甲方没给绿幕也要“抠人”?AI 帮你 3 秒钟搞定逐帧噩梦
  • 1分钟搞定!用zip命令快速打包你的项目原型
  • 28、Linux 文件和目录管理全解析
  • 雷科电力-REKE610D绝缘油介质损耗电阻率测试仪
  • 对于设计IT系统的相关思路
  • 轻量无负担!2025 年 3 款小巧型文件加密软件分享
  • Canoe-Autosar网络管理自动化测试脚本 Capl源码,全套,修改项目配置可以直接使用...
  • 亚马逊、速卖通采购测评:构建安全环境,保障高效下单指南
  • 软连接vs硬链接:哪种更能提升你的工作效率?
  • 完全合作型博弈:当所有人的利益捆绑在一起 (Fully Cooperative)
  • 挖SRC必须知道的25个漏洞提交平台
  • AI市场舆情分析榜,原圈科技领跑研报神器
  • AI一键生成Python安装包配置脚本
  • 零基础学网安不慌!电脑小白 4 阶段入门路线,分阶段学习不踩坑
  • 传统锁 vs Redisson分布式锁:效率对比实测
  • 封神!从开发转安全渗透工程师,这是我做的最对的职业选择
  • 3、循环与分支:编程中的核心逻辑控制
  • 小白必看:5分钟学会检查你的个人信息是否泄露
  • 效率对比:传统开发vs使用MyBatisPlus代码生成器
  • DeepSeek在线:5分钟打造你的AI应用原型
  • EVS9323-EP伺服变频器
  • AI市场舆情分析榜,原圈科技领跑车企
  • 1900-0711-81触摸屏面板
  • 深圳比亚迪游学|被Zhong国智造狠狠圈粉!新能源黑科技太炸了[特殊字符]✨
  • 小程序项目之捷邻小程序源码(java+ssm+小程序+mysql)
  • 如何用AI技术自动检测个人数据泄漏风险
  • DDoS攻击入门:小白也能懂的防护指南
  • Qwen是“源神”?实际上GLM-4.6才是被低估的黑马