最近比较忙,好久没有更新博客了,今天就将最近研究的一个东西总结一下,最近在维护公司的一个项目,我负责的模块主要是下载杂志后及时的更新UI,将最新的下载进度更新到UI上,中间遇到的一个问题是:同一个对象的下载进度会有多个Item监听它的状态,也就是说一个进度要更新到多个Item上,开始没有什么头绪,百度一番后发现了观察者模式这个东西,它就是为了满足这种一对多问题而出现的.
有了思路以后,就着手开始了解观察者模式是如何工作的,虽然以前知道设计模式里有这个东西,但还真是没用过,下面就讲解一下观察者模式如何在项目中实际应用.先看一下应用在项目中的效果:
如图:同一本书在书店页与书架页的下载进度是要完全一样的,我们可以用观察者模式达到这种效果.
1.观察者模式包含的内容:观察者模式中主要有观察者和被观察者两种对象,被观察者主要实现数据或状态的更新,有更新后通知所有的观察者,而观察者则主要负责收到通知后,去更新自己所关注的内容.
2.观察者模式的使用步骤:1)创建一个 Subject(主题接口),接口中有被观察者要实现的所有功能;2)创建一个观察者接口,所有实现了此接口功能的,都被称为观察者,3)将所有实现了观察者接口的观察者都注册到被观察者中.4)被观察者通过遍历所有的观察者对象,调用其实现的观察者接口方法.(就是一个接口的回调过程)
只要实现了以上四个步骤就成功的创建一个观察者模式,下面是我项目中用到观察者模式的框架结构:
1.创建一个Subject主题接口,定义了被观察者的功能.如图:
这里定义了被观察者的功能和添加,删除观察者..
2.创建一个被观察者对象,实现此主题接口功能
此处,我省略了项目里其它的代码,只留下一个框架结构.这样我们的被观察者类就创建好了.
3.创建观察者接口,定义好观察者要实现的功能.
4.创建我们的观察者类,如图:
实现了我们定义好的观察者接口即成为一个观察者.
至此,整个观察者模式的框架就搭建完成,只要在对应的类中实现我们要的业务逻辑即可.
总结: 1.观察者模式是一个非常重要的设计模式,从android系统的设计就可以看的出,系统的设计本身就使用了非常多的观察者模式,例如 : View的事件监听机制,ContentProvider 的 ContentObserver, BaseAdapter的设计,可见,观察者模式是十分重要的,是我们必须掌握的.2.掌握观察者模式的前提是必须熟练使用接口回调,观察者模式其实就是一个复杂的接口回调.