Java观察者模式

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