Java设计模式解析:观察者模式及其应用
需积分: 10 99 浏览量
更新于2024-09-01
收藏 659KB PDF 举报
"这篇文档是关于Java设计模式中的观察者模式的浅析,主要讨论了其概念、使用场景、优缺点以及单线程同步实现。"
观察者模式是一种行为型设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常被称为发布-订阅或监听器模式。在Java中,观察者模式通过`Observable`和`Observer`接口来实现。
1. **概念与角色**
- **被观察者(Observable)**:这是被观察的对象,当其状态改变时,会通知所有观察者。
- **观察者(Observer)**:关注被观察对象的状态,当被观察者发生变化时,观察者会接收到通知并采取相应行动。
2. **使用场景**
- 当一个对象(如博主)的行为会影响到其他多个对象(如粉丝)时,观察者模式非常适用。例如,博主发布新的文章,粉丝会收到通知并查看。
3. **优点**
- **抽象耦合**:观察者和被观察者之间通过接口连接,降低了两者之间的直接依赖。
- **触发机制**:观察者模式提供了一种广播事件的方式,使得多个对象能同时响应同一事件。
4. **缺点**
- **效率问题**:如果被观察者有许多观察者,通知所有观察者可能会消耗大量时间。
- **循环依赖**:如果观察者和被观察者之间存在循环依赖,可能导致无限递归和系统崩溃。
- **信息不明确**:观察者通常只知道被观察者发生了变化,但不知道具体变化的细节。
5. **单线程同步实现**
Java提供了内置的`Observable`类和`Observer`接口来支持观察者模式的实现。在代码示例中,`Fan`类实现了`Observer`接口,代表粉丝;`Blogger`类则可以看作是被观察者,使用`Observable`作为基类。当博主发布新文章(状态改变)时,会调用`Observable`的`notifyObservers`方法,通知所有观察者(粉丝)。
6. **代码实现**
```java
public class Blogger extends Observable {
// 博主发布文章
public void publish(Article article) {
setChanged(); // 标记状态已变
notifyObservers(article); // 通知所有观察者
}
}
public class Fan implements Observer {
private String fanName;
@Override
public void update(Observable o, Object arg) {
Blogger blogger = (Blogger) o;
Article article = (Article) arg;
// 粉丝接收通知并查看文章
log.info("粉丝{}收到博主{}的新文章:{}", fanName, blogger.getName(), article.getTitle());
}
}
```
在实际应用中,观察者模式可以广泛应用于事件驱动的系统、用户界面组件之间的交互以及分布式系统中的通信等场景。通过合理地运用观察者模式,可以提高代码的灵活性和可维护性,同时降低模块间的耦合度。
2020-07-27 上传
2020-07-27 上传
2020-08-24 上传
2020-09-02 上传
2020-11-17 上传
2021-08-12 上传
2020-06-18 上传
王老邪
- 粉丝: 114
- 资源: 64
最新资源
- IEEE 14总线系统Simulink模型开发指南与案例研究
- STLinkV2.J16.S4固件更新与应用指南
- Java并发处理的实用示例分析
- Linux下简化部署与日志查看的Shell脚本工具
- Maven增量编译技术详解及应用示例
- MyEclipse 2021.5.24a最新版本发布
- Indore探索前端代码库使用指南与开发环境搭建
- 电子技术基础数字部分PPT课件第六版康华光
- MySQL 8.0.25版本可视化安装包详细介绍
- 易语言实现主流搜索引擎快速集成
- 使用asyncio-sse包装器实现服务器事件推送简易指南
- Java高级开发工程师面试要点总结
- R语言项目ClearningData-Proj1的数据处理
- VFP成本费用计算系统源码及论文全面解析
- Qt5与C++打造书籍管理系统教程
- React 应用入门:开发、测试及生产部署教程