Java观察者模式
需积分: 0 197 浏览量
更新于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中的按钮点击事件、多线程中的同步机制等。
在实际项目中,观察者模式常常与其他设计模式结合使用,如工厂模式来创建观察者实例,单例模式来管理观察者集合,以及策略模式来定义不同的通知策略。通过这种方式,可以构建出更加灵活、可维护的系统架构。