Java观察者模式
需积分: 0 27 浏览量
更新于2016-01-16
收藏 5KB RAR 举报
Java观察者模式是一种行为设计模式,它允许定义对象之间的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在Java中,这种模式被内置到`java.util.Observable`和`java.util.Observer`接口中,为实现事件驱动编程提供了便利。
观察者模式的核心思想是“发布-订阅”模型,即发布者(被观察对象)通过增加、删除或通知观察者来管理订阅者。当发布者状态发生变化时,它会调用`notifyObservers()`方法,将消息广播给所有注册的观察者。观察者则通过`update()`方法处理这些变化。
在网购场景中,可以将商家看作是发布者,而消费者则是观察者。例如,当商家上架新产品时,这个事件(状态变化)会被广播给所有关注该商家的消费者。消费者(观察者)接收到这个通知后,可以选择查看新品详情,甚至购买。
具体实现时,我们需要创建一个`Observable`类的子类,代表被观察的对象。在这个子类中,我们可以添加业务逻辑,如上架商品、下架商品等操作,并在状态改变时调用`setChanged()`和`notifyObservers()`方法。
```java
import java.util.Observable;
public class ProductCatalog extends Observable {
public void addProduct(Product product) {
// 添加商品到目录
setChanged(); // 标记状态已改变
notifyObservers(product); // 通知所有观察者
}
// 其他业务方法...
}
```
接着,创建一个实现了`Observer`接口的类,代表观察者。观察者需要重写`update()`方法来处理接收到的通知。
```java
import java.util.Observable;
import java.util.Observer;
public class Consumer implements Observer {
@Override
public void update(Observable o, Object arg) {
if (arg instanceof Product) {
Product product = (Product) arg;
System.out.println("新商品上架:" + product.getName());
// 处理其他业务逻辑,如查看商品详情等
}
}
}
```
为了建立商家与消费者的依赖关系,我们需要在`Consumer`实例化时将其注册为`ProductCatalog`的观察者。
```java
ProductCatalog catalog = new ProductCatalog();
Consumer consumer1 = new Consumer();
Consumer consumer2 = new Consumer();
catalog.addObserver(consumer1);
catalog.addObserver(consumer2);
// 当商家上架商品时,所有消费者都会收到通知
catalog.addProduct(new Product("新品1"));
```
Java观察者模式使得代码结构松耦合,易于扩展。当有新的观察者需要加入或者某个观察者不再关心发布者状态时,只需要简单地添加或移除观察者即可。此外,观察者模式不仅限于简单的状态变更通知,还可以用于实现复杂的事件处理,比如GUI中的按钮点击事件、多线程中的同步机制等。
在实际项目中,观察者模式常常与其他设计模式结合使用,如工厂模式来创建观察者实例,单例模式来管理观察者集合,以及策略模式来定义不同的通知策略。通过这种方式,可以构建出更加灵活、可维护的系统架构。
![avatar](https://profile-avatar.csdnimg.cn/700128dbc59e4c87a13b42242ceba491_u012810020.jpg!1)
lzy_tinyjoy
- 粉丝: 108
- 资源: 31
最新资源
- 电气安装工 二级工.pdf
- MDM+ESB解决方案-企业数据标准化和服务集成的最佳实践
- 网络工程技术中常用英文术语与配置翻译汇总手册
- 软考中级网络工程师 考前冲刺知识点速记
- 闪烁的霓虹灯文字设计404页面.zip
- 三相时域信号的时序频谱图
- TI C2000F28002x烧录进Flash并正常运行,TMS320F280025C的Flash模式模板工程
- 王道C语言初级阶段(C语言入门)
- 2000-2020年年汇率平均价数据.xls
- 京东美妆爬虫数据集,可以用于大数据分析专业毕设做美妆行业数据分析使用
- 基于Deepseek自动生成单元测试的Idea插件
- 《从买货到销售》系列课,全方位提升你的时尚行业竞争力
- 新玩法AI做漫画小说赛道项目玩法教程,操作简单可批量制作
- 新支付宝无人野路子项目玩法教程,无需露脸,实现被动收入
- jdk11 Windows版本
- 1997-2019年各省进出口总额数据