您的位置:首页 > 移动开发 > Android开发

聊聊Android中那些无处不在的回调(三)——回调与观察者模式

2013-07-01 09:35 253 查看

观察者模式的简单定义

观察者模式是一种设计模式,它定义了一种一对多的类之间的依赖关系。其中的“一”指的是被观察者
T
,“多”指的是观察者
S
。当
T
的数据或者说状态发生变化时,会通知观察者
S
。从而
S
就知道了
T
的状态发生了变化,从而可以做出相应的处理。对
S
来说,任何对
T
有兴趣的
S
都可以观察
T
;对
T
来说,任何对自己有兴趣的
S
它都会通知。

类比看Android中的回调与观察者模式

还是以Android中的Button控件为例:

Button控件对应观察者模式中的被观察者
T
,而OnClickListener对应观察者
S
。当Button的状态发生变化时,会通知观察者OnClickListener。

那么Button会通知哪些OnClickListener呢?

因为listener是通过setOnClickListener方法添加进来的,所以通过该方法把谁传进来了就通知谁。

而我们通常的做法是让Activity去实现OnClickListener接口然后将Activity传给setOnClickListener方法。所以说Activity就是被通知的那个观察者。

这样也是合情合理的,因为Activity的职责就是管理各种控件,对控件的状态要了如指掌。所以让Activity来做观察者是最合适不过的了。

不过文章开头也说了,不是观察者模式是一对多的关系么?是的,不过一对一也算是一对多的特例了。哈哈。但因为Android中控件只能有一个Activity来管理,所以观察者就只有一个。

话说回来,如果有多个观察者的话,就不是通过setOnClickListener方法来添加观察者了,而是通过addOnClickListener方法添加。

总结

可以说Android中很多时候回调就是通过观察者模式而实现的,不过多数时候只有一个观察者,多数时候这个观察者就是Activity,因为Activity是一个应用的总管。

另外,其实Android中的观察者模式和回调其实属于面向对象中组合的概念,就是在不改变一个类的情况下去扩展这个类的功能,也可以理解为运行时的继承。

参考链接

Observer Design Pattern in Java
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: