观察者模式通过接口定义、集合管理与事件通知实现解耦,核心是Subject与Observer分离;需自定义接口、用集合管理观察者、状态变更时遍历通知;Java内置Observable已弃用,推荐手写接口+组合方式。
观察者模式在Java中可通过接口定义+集合管理+事件通知的方式实现,核心是解耦被观察者(Subject)与观察者(Observer),让状态变化自动触发响应,无需硬
编码
调用。
定义观察者与被观察者接口
先抽象出行为契约,避免具体类强依赖:
Observer接口
:声明
方法,接收被观察者传来的数据或自身去拉取
Observable/Subject接口
:声明
、
、
等管理与通知能力
实现可管理的被观察者类
以天气站为例,被观察者需维护观察者列表,并在状态变更时统一通知:
使用
存储注册对象,注意线程安全场景下可换为
状态更新后调用
,遍历列表执行每个观察者的
避免在通知过程中修改集合(如观察者内部反向注销),可先复制列表再遍历
编写具体观察者并注册响应逻辑
每个观察者实现
接口,关注自己关心的数据:
Eclipse导入Android或其他的JAVA项目的正确方法 WORD版
本文档主要讲述的是Eclipse导入Android或其他的JAVA项目的正确方法;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
下载
立即学习
“
Java免费学习笔记(深入)
”;
例如
只更新当前温湿度,
负责计算均值和极值
注册时调用
,解耦于初始化时机
中建议只做轻量处理;耗时操作应交由线程池或异步机制,防止阻塞通知流
利用Java内置类简化开发(可选)
Java早期提供
类和
接口,但自JDK 9起已标记为
deprecated
:
原因包括:
是类而非接口,限制继承;通知机制不支持泛型;无法灵活控制通知顺序与异常处理
推荐手写接口+组合方式,更清晰、可测、易扩展
若项目已用旧版,迁移成本不高——只需提取接口,将原
功能移到自定义Subject中
update()register()remove()notifyObservers()ArrayListCopyOnWriteArrayListnotifyObservers()update()ObserverCurrentConditionsDisplayStatisticsDisplayweatherStation.registerObserver(this)update()java.util.Observablejava.util.ObserverObservableObservable