一、什么是Android观察者模式
Android观察者模式是一种设计模式,用于在应用程序的不同组件之间传递信息。在这种模式下,一个组件,称为观察者,可以订阅另一个组件,称为被观察者,以便在后者发生变化时被通知。这种模式可以用于各种目的,例如实现MVC、MVVM或用于线程通信。
使用观察者模式可以实现应用程序中的松耦合,由于观察者与被观察者之间没有明确的依赖关系,因此组件可以轻松添加或删除而不会影响应用程序的其余部分。
// 代码示例 public class Observable { private final Listobservers = new ArrayList(); public void addObserver(Observer observer) { synchronized (observers) { observers.add(observer); } } public void removeObserver(Observer observer) { synchronized (observers) { observers.remove(observer); } } public void notifyObservers() { synchronized (observers) { for (Observer observer : observers) { observer.update(this); } } } }
二、如何使用Android观察者模式
1、定义观察者和被观察者
要使用观察者模式,需要定义一个观察者和一个被观察者。在Android中,被观察者可以是Activity、Fragment、View或Application等组件。观察者可以是任何实现了Observer接口的组件。
// 代码示例 - 被观察者 public class MyObservable extends Observable { private int mData; public int getData() { return mData; } public void setData(int data) { mData = data; setChanged(); notifyObservers(); } } // 代码示例 - 观察者 public class MyObserver implements Observer { @Override public void update(Observable observable, Object o) { if (observable instanceof MyObservable) { int data = ((MyObservable) observable).getData(); // TODO: 根据数据做相应的处理 } } }
2、将观察者注册到被观察者上
在Android中,可以通过调用被观察者的 addObserver() 方法将观察者注册到被观察者上,例如:
MyObservable observable = new MyObservable(); observable.addObserver(new MyObserver());
3、让被观察者发送通知
当被观察者的数据发生变化时,需要调用 setChanged() 和 notifyObservers() 方法发送通知。例如:
observable.setData(10);
三、Android观察者模式的优缺点
1、优点
- 松耦合:观察者与被观察者之间没有明确的依赖关系,因此组件可以轻松添加或删除而不会影响应用程序的其余部分。
- 可扩展性:可以轻松添加更多的观察者或被观察者以满足应用程序的需求。
- 灵活性:可以实现不同类型的观察者、被观察者和事件。
2、缺点
- 性能:如果Observable的状态改变得太频繁,那么会导致更多的通知,降低应用程序的性能。
- 复杂性:如果没有恰当地实现观察者模式,那么代码可以变得非常复杂和难以维护。
四、Android观察者模式的应用场景
- 实时通知:当一个Android应用程序需要实时通知用户有关事件的发生时,观察者模式特别有用。例如,当用户在游戏中击败了最高分数时,一个通知会被发送到所有的观察者。
- MVC模式:在MVC模式中,控制器充当观察者,模型充当被观察者,视图充当展示器。当模型数据发生更改时,被观察者向观察者发送通知,观察者更新控制器和视图。
- 微服务:当应用程序需要执行一些长时间的操作时,可以使用观察者模式创建微服务,以便将进度和结果通知给观察者。