Android设计模式——观察者模式(十一大行为型)

1.观察者模式介绍

        观察者模式(Observer Pattern),是十一大行为型设计模式之一。

        观察者模式是一个使用率非常高的模式,最常用于GUI系统,订阅发布系统。观察者模式最重要的作用就是解耦,将被观察者和观察者解耦,使得它们之间的依赖性更小,甚至做到毫无依赖。

2.观察者模式的定义

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

3.观察者模式的使用场景

        1.关联行为场景,需要注意的是,关联行为是可拆分的,而不是“组合”关系;

        2.事件多级触发场景;

        3.跨系统的消息交换场景,如消息队列,事件总线的处理机制。

4.UML类图

UML类图

5.角色介绍

1.Subject:抽象主题,也就是被观察者(Observable)的角色,抽象主题角色把所有观察者对象的引用保存在一个集合里,每个主题都可以有任意数量的观察者,抽象主题提供一个接口,可以增加和删除观察者对象。

2.ConcreteSubject:具体主题,该角色将有关状态存入具体观察者对象,在具体主题的内部状态发生改变时,给所有注册过的观察者发出通知,具体主题角色又叫做具体被观察者(ConcreteObservable)角色。

3.Observer:抽象观察者,该角色是观察者的抽象类,它定义了一个更新接口,使得在得到主题的更改通知时跟新自己。

4.ConcreteObserver:具体的观察者,该角色实现抽象观察者角色所定义的更新接口,以便在主题的状态发生变化时更新自身的状态。

6.例子

被观察者(上图)
观察者(上图)
客户端调用(上图)

例子分析

        写一个继承Observable的被观察者类,写一个方法,里面直接调用系统父类Observable的setChanged方法和notifyObservers方法。再写一个实现Observer的观察者类。在客户端调用的时候,将观察者注册到被观察者对象的观察者列表中,就把被观察者和观察者关联了。

注意:必须写一个继承Observable的被观察者类,不然Observable里的方法调用无效。

7.Android源码中观察者模式

        平时见到的ListView里的Adapter之类的都用到了观察者模式。

8.总结

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

        观察者模式优点:观察者和被观察者之间是抽象耦合,应对业务变化;增强系统灵活性,可扩展性。

        观察者模式缺点:在应用观察者模式时需要考虑开发效率和运行效率问题,程序中包括一个被观察者,多个观察者,开发和调试等内容会比较复杂,而且在Java中消息的通知默认是顺序执行,一个观察者卡顿,会影响整体的执行效率,在这种情况下,一般考虑采用异步的方式。

PS:读《Android源码设计模式解析与实战》中的观察者模式之后的一些笔记与感悟。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。