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 模式的示例代码:

public interface Observer {
    void update(String message);
}

public interface Subject {
    void attach(Observer observer);
    void detach(Observer observer);
    void notify(String message);
}

public class ConcreteSubject implements Subject {
    private List<Observer> observerList = new ArrayList<>();

    @Override
    public void attach(Observer observer) {
        observerList.add(observer);
    }

    @Override
    public void detach(Observer observer) {
        observerList.remove(observer);
    }

    @Override
    public void notify(String message) {
        for (Observer observer : observerList) {
            observer.update(message);
        }
    }
}

public class ConcreteObserver implements Observer {
    private String name;

    public ConcreteObserver(String name) {
        this.name = name;
    }

    @Override
    public void update(String message) {
        System.out.println(name + " received message: " + message);
    }
}

public class Client {
    public static void main(String[] args) {
        ConcreteSubject subject = new ConcreteSubject();

        ConcreteObserver observer1 = new ConcreteObserver("observer1");
        ConcreteObserver observer2 = new ConcreteObserver("observer2");

        subject.attach(observer1);
        subject.attach(observer2);

        subject.notify("Hello, observers!");

        subject.detach(observer1);

        subject.notify("Hello, observer2!");
    }
}

在上面的示例代码中,我们首先定义了两个接口: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 对象,从而实现数据的实时观察和更新。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值