当前位置:   article > 正文

Android 常用的设计模式 六 (Observer(观察者)模式)_android observer

android observer
  1. MVC(Model-View-Controller)模式
  2. MVP(Model-View-Presenter)模式
  3. MVVM(Model-View-ViewModel)模式
  4. Singleton(单例)模式
  5. Factory(工厂)模式
  6. Observer(观察者)模式
  7. Strategy(策略)模式
  8. Adapter(适配器)模式

这些设计模式都有不同的特点和用途,在开发 Android 应用程序时可以根据具体的需求进行选择。

Observer 模式是一种行为型设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,当主题对象发生变化时,所有的观察者对象都能够收到通知并更新自己。在 Android 开发中,Observer 模式通常用于实现数据的观察和更新,比如实现列表数据的实时更新、实现用户登录状态的同步等。

Observer 模式的核心思想是将主题对象和观察者对象分离开来,从而实现松耦合的设计。主题对象负责维护观察者对象的列表,当主题对象发生变化时,它会通知所有的观察者对象。观察者对象则通过订阅主题对象,从而可以接收主题对象的通知并进行相应的处理。

以下是一个简单的 Observer 模式的示例代码:

  1. public interface Observer {
  2. void update(String message);
  3. }
  4. public interface Subject {
  5. void attach(Observer observer);
  6. void detach(Observer observer);
  7. void notify(String message);
  8. }
  9. public class ConcreteSubject implements Subject {
  10. private List<Observer> observerList = new ArrayList<>();
  11. @Override
  12. public void attach(Observer observer) {
  13. observerList.add(observer);
  14. }
  15. @Override
  16. public void detach(Observer observer) {
  17. observerList.remove(observer);
  18. }
  19. @Override
  20. public void notify(String message) {
  21. for (Observer observer : observerList) {
  22. observer.update(message);
  23. }
  24. }
  25. }
  26. public class ConcreteObserver implements Observer {
  27. private String name;
  28. public ConcreteObserver(String name) {
  29. this.name = name;
  30. }
  31. @Override
  32. public void update(String message) {
  33. System.out.println(name + " received message: " + message);
  34. }
  35. }
  36. public class Client {
  37. public static void main(String[] args) {
  38. ConcreteSubject subject = new ConcreteSubject();
  39. ConcreteObserver observer1 = new ConcreteObserver("observer1");
  40. ConcreteObserver observer2 = new ConcreteObserver("observer2");
  41. subject.attach(observer1);
  42. subject.attach(observer2);
  43. subject.notify("Hello, observers!");
  44. subject.detach(observer1);
  45. subject.notify("Hello, observer2!");
  46. }
  47. }

在上面的示例代码中,我们首先定义了两个接口:Observer 和 Subject。Observer 接口定义了一个名为 update() 的方法,用于在接收到主题对象的通知时进行相应的处理;Subject 接口定义了三个方法:attach()、detach() 和 notify(),用于维护观察者对象的列表,并且当主题对象发生变化时,通知所有的观察者对象。然后,我们定义了一个名为 ConcreteSubject 的具体主题类,该类实现了 Subject 接口,并且维护了一个观察者对象的列表,当主题对象发生变化时,它会通知所有的观察者对象。

接下来,我们定义了一个名为 ConcreteObserver 的具体观察者类,该类实现了 Observer 接口,用于在接收到主题对象的通知时进行相应处理。

最后,我们定义了一个名为 Client 的测试类,用于测试 Observer 模式的实现。在该测试类中,我们首先创建了一个 ConcreteSubject 对象,并且创建了两个 ConcreteObserver 对象,然后将这两个 ConcreteObserver 对象分别添加到 ConcreteSubject 对象的观察者列表中。接着,我们调用 ConcreteSubject 对象的 notify() 方法向所有的观察者对象发送通知,观察者对象收到通知后会进行相应的处理。最后,我们将 observer1 对象从 ConcreteSubject 对象的观察者列表中移除,然后再次调用 ConcreteSubject 对象的 notify() 方法,此时只有 observer2 对象会收到通知。

 在 Android 开发中,Observer 模式通常被应用于实现 MVC、MVP、MVVM 等架构模式中的数据观察和更新功能。例如,在 MVVM 架构中,ViewModel 可以作为主题对象,负责维护数据的状态,并且在数据状态发生变化时通知所有的观察者对象,例如 Activity 或 Fragment。在这种情况下,观察者对象可以通过订阅 ViewModel 对象的 LiveData 或者 RxJava 的 Observable 对象,从而实现数据的实时观察和更新。

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/286286
推荐阅读
相关标签
  

闽ICP备14008679号