美文网首页
10 Android常见设计模式:观察者模式

10 Android常见设计模式:观察者模式

作者: 彩虹_直至黑白 | 来源:发表于2021-12-16 10:51 被阅读0次

前言

观察者模式是一个使用率非常高的模式,它最常用的地方是GUI系统、订阅——发布系统。因为这个模式的一个重要作用就是解耦,将被观察者和观察者解耦,使得它们之间的依赖性更小,甚至做到毫无依赖。以GUI系统来说,应用的UI具有易变性,尤其是前期随着业务的改变或者产品的需求修改,应用界面也会经常性变化,但是业务逻辑基本变化不大,此时,GUI系统需要一套机制来应对这种情况,使得UI层与具体的业务逻辑解耦,观察者模式此时就派上用场了。

定义

定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。

简单实现

我们以上课铃声响起,学生老师上课为例进行说明。

  1. 创建抽象被观察者
public interface Observable {

    //添加观察者
    void addObserver(Observer observer);

    //移除观察者
    void removeObserver(Observer observer);

    //通知观察者
    void notifyObserver(String msg);
}
  1. 创建抽象观察者
public interface Observer {
    void action(String msg);
}
  1. 创建一个具体主题,即具体被观察者(上课铃声)
public class AlarmClock implements Observable {

    //保存观察者对象
    List<Observer> list = new ArrayList<>();

  @Override
    public void addObserver(Observer observer) {
        list.add(observer);
    }
    
    @Override
    public void removeObserver(Observer observer) {
        list.remove(observer);
    }
    
    //通知观察者
    @Override
    public void notifyObserver(String msg) {
        Log.d("AlarmClock", "notifyObserver: " + list.toString());
        for (Observer observer : list) {
            observer.action(msg);
        }
    }
}
  1. 创建具体观察者(学生,老师)
public class Students implements Observer {

    private final String name;

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

    @Override
    public void action(String msg) {
        Log.e("action", msg + name + ",开始听课");
    }
}
public class Teacher implements Observer {
    
    @Override
    public void action(String msg) {
        Log.e("action", msg + ",老师开始讲课");
    }
}
  1. 调用展示结果
//创建被观察者 
Observable alarmClock = new AlarmClock();

//创建观察者
 Observer student1 = new Students("小屁孩");
 Observer student2 = new Students("中屁孩");
 Observer student3 = new Students("大屁孩");
 Observer teacher = new Teacher();

//注册观察者
 alarmClock.addObserver(teacher);
 alarmClock.addObserver(student1);
 alarmClock.addObserver(student2);
 alarmClock.addObserver(student3);

//通知已注册的观察者
 alarmClock.notifyObserver("上课铃声已经响了");

总结

观察者模式主要的作用就是对象解耦,将观察者与被观察者完全隔离,只依赖于Observer和Observable抽象。例如,ListView就是运用了Adapter和观察者模式使得它的可扩展性、灵活性非常强,而耦合度却很低,这是设计模式在Android源码中优秀运用的典范。

相关文章

  • 11.9设计模式-观察者模式-详解

    设计模式-观察者模式 观察者模式详解 观察者模式在android中的实际运用 1.观察者模式详解 2.观察者模式在...

  • 设计模式

    Android开发中常见的设计模式Java设计模式:23种设计模式全面解析(超级详细)Android的设计模式-设...

  • Android 观察者模式

    Android 设计模式系列文章 Android 23种设计模式 前言 观察者模式是我们使用率比较高的一种模式了。...

  • 10 Android常见设计模式:观察者模式

    前言 观察者模式是一个使用率非常高的模式,它最常用的地方是GUI系统、订阅——发布系统。因为这个模式的一个重要作用...

  • iOS单例模式

    1 单例模式 它是一种设计模式(常见的设计模式有:观察者模式、工厂模式、门面模式等)。单例设计模式中,一个类只有一...

  • Android 代理模式

    Android 设计模式系列文章 Android 23种设计模式 前言 代理模式可能是我们平时开发中最常见的模式之...

  • Android常见设计模式—观察者模式

    Observer(观察者模式) 有时被称作发布/订阅模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同...

  • Android 模板方法模式

    Android 设计模式系列文章 Android 23种设计模式 前言 模板方法模式是一种我们十分常见的模式,比如...

  • Android 工厂模式

    Android 工厂模式 Android 23种设计模式 前言 工厂模式是创建型模式,使我们常用/常见的模式之一。...

  • 观察者设计模式

    每周学点Java设计模式__观察者设计模式 本次继续更新java23中设计模式之一——观察者模式。 观察者模式(有...

网友评论

      本文标题:10 Android常见设计模式:观察者模式

      本文链接:https://www.haomeiwen.com/subject/xpwufrtx.html