观察者模式实践:Android中的Observer模式解析

5星 · 超过95%的资源 需积分: 0 106 下载量 39 浏览量 更新于2024-09-15 收藏 71KB DOC 举报
"Android Observer 观察者模式 案例详解" 观察者模式(Observer Pattern)是设计模式中的一种重要模式,尤其在Android开发中,它扮演着关键角色,用于实现对象之间的松耦合。通过这个模式,一个对象(被观察者)的状态变化可以自动通知到其他依赖于它的对象(观察者)。这种模式在事件驱动编程中尤为常见,比如用户界面的交互处理。 在Android中,观察者模式主要体现在`java.util.Observable`和`java.util.Observer`这两个类上,但这里的案例是自定义实现,以更好地理解观察者模式的核心思想。 案例详解: 1. 抽象观察者(Abstract Watcher):这是观察者接口,定义了观察者需要实现的行为,即当被观察者状态改变时,如何接收更新信息。在案例中,定义了一个`updateNotify(Content content)`方法,当接收到内容更新时,观察者会根据接收到的`Content`对象进行相应操作。 ```java public interface Watcher { public void updateNotify(Content content); } ``` 2. 抽象被观察者(Abstract Watched):这是被观察者的接口,定义了如何添加、移除观察者以及如何通知所有观察者。这里包含`add(Watcher watcher)`、`remove(Watcher watcher)`和`notifyWatcher(Content content)`方法。 ```java public interface Watched { public void add(Watcher watcher); public void remove(Watcher watcher); public void notifyWatcher(Content content); } ``` 3. 具体观察者(Concrete Watcher):实现了`Watcher`接口,当接收到`Content`对象更新时,具体实现`updateNotify(Content content)`方法,例如打印出`Content`对象的`id`、`name`和`address`。 ```java public class ConcreteWatcher implements Watcher { public void updateNotify(Content content) { int id = content.getId(); String name = content.getName(); String address = content.getAddress(); System.out.println("id:" + id + "/nname:" + name + "/naddress:" + address); } } ``` 4. 具体被观察者(Concrete Watched):实现了`Watched`接口,维护了一个`List<Watcher>`来存储所有的观察者,并实现了添加、删除观察者的方法。当需要通知所有观察者时,遍历列表并调用每个观察者的`updateNotify()`方法。 ```java public class ConcreteWatched implements Watched { private List<Watcher> list = new ArrayList<Watcher>(); public void add(Watcher watcher) { list.add(watcher); } public void remove(Watcher watcher) { // 移除观察者逻辑 } public void notifyWatcher(Content content) { for (Watcher watcher : list) { watcher.updateNotify(content); } } } ``` 在实际应用中,被观察者(如一个数据模型)的状态改变时,会调用`notifyWatcher()`方法,将更新的信息传递给所有注册的观察者,观察者(如UI组件)则根据这些信息更新自己的显示。这种模式使得系统能够灵活地扩展,因为被观察者与观察者之间没有直接的依赖关系,只需遵循接口约定即可。 在Android开发中,观察者模式常用于Activity与Fragment之间的通信、BroadcastReceiver的注册与接收、事件总线(如EventBus)的实现等场景。理解并熟练运用观察者模式,能帮助开发者构建更加健壮和可维护的代码结构。