当前位置: 首页 > 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.zskr.cn/news/117210.html

相关文章:

  • Airflow - Postgres Connection
  • AI内控智能体开发:把风险防控交给“智能管家”
  • 无需安装!浏览器直接运行Java8的5种创新方案
  • 2025最新CPVC电力管服务商 TOP5 评测!服务深耕四川、贵州、西藏、重庆,优质厂商权威榜单发布,技术赋能构建电力工程安全生态 - 全局中转站
  • 零基础用Vue3打造你的第一个PDF阅读器
  • 2025 最新波纹管厂家 TOP5 评测!服务深度覆盖四川、贵州、西藏、重庆,西南标杆 + 全品类解决方案权威榜单发布,技术赋能基建工程升级 - 全局中转站
  • Item40--明智而审慎地使用多重继承(尽量别用,除非是 Interface 接口类)
  • A860-2020-T301编码器
  • 30秒搭建防火墙状态监控原型
  • Item39--明智而审慎地使用 private 继承
  • 2025年国内正规的工业冷却塔实力厂家哪家靠谱,冷却塔填料/方形横流冷却塔/工业冷却塔/圆形逆流冷却塔/工业冷却塔定做厂家哪家权威 - 品牌推荐师
  • 高危漏洞CVE-2025-54004:WooCommerce前台管理插件权限绕过漏洞剖析
  • AutoHotkey v2 (AHK) windows自动化使用
  • 想做安全副业却纠结方向?漏洞挖掘、技术博客、竞赛奖金实战哪个更适合你?
  • ConvLSTM实战:构建交通流量预测系统
  • 一文帮你总结2025年最新获客系统品牌有哪些,必看! - 品牌策略主理人
  • Conda环境管理:比传统pip快3倍的依赖解决方案
  • Redmi Note 12 Pro Speed-开启开发者选项
  • 利用wan2.1协议快速构建网络通信原型
  • TestDisk数据恢复实战:从分区丢失到文件找回的完整指南
  • 盲盒抽赏小程序开发运营指南:从合规架构到百万盈利的全链路拆解
  • 使用 C# 将 DataTable 和 Excel 数据互转
  • 敏捷协作中的心理测试:消除团队沟通的隐藏BUG
  • 2025搭子经济风口:组局小程序开发落地、盈利模式与风险防控手册
  • 源网荷储充一体化平台:安科瑞EMS微电网能源管理系统介绍
  • 磁链观测器的探索之旅:从仿真到闭环代码实现
  • 33、Linux线程同步与互斥
  • 终极指南:macOS iSCSI启动器完整配置与使用详解
  • Taiga开源项目管理工具:2025年敏捷开发终极指南
  • SimpRead浏览器扩展图标终极适配指南:从16px到128px的完整解析