美文网首页
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源码中优秀运用的典范。

    相关文章

      网友评论

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

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