文档章节

由抽象类DataSetObserver想到的

亭子happy
 亭子happy
发布于 2014/04/17 14:49
字数 293
阅读 98
收藏 2

   android的database包中有这样一个抽象类DataSetObserver。

    第一眼看到这个类时,第一反应是为什么不设计成接口呢?或者即使是抽象类,方法为什么不是abstract的呢?

    想了想,马上明白原因了。如果这个类设计成接口,那么实现这个接口的类就要实现接口里面的所有方法。如果这个类设计成抽象类,而里面的方法都设计成abstract的,那么也同样,继承这个抽象类的类也要实现这些abstract方法。这样,如果某个用户只想实现onChanged方法,而另一个用户只想实现onInvalidated()方法,就没有办法做到了。这两个用户都得实现这两个方法。

    如果写成抽象类,就表明了该类需要继承,否则只有空方法没有任何用处。而里面的方法都都是空方法实现,这样,用户继承这个类的类,可以重写任意几个自己需要的方法就可以了。

    这个设计看起来很简单,但是却很巧妙。

© 著作权归作者所有

共有 人打赏支持
亭子happy
粉丝 117
博文 201
码字总数 45713
作品 0
海淀
程序员
追溯源码解决android疑难问题1--Viewpager之notifyDataSetChanged

最近项目结束,搞了一次代码分享。其中一位同学分享了一下自己在解决问题过程中的一些心得体会,感觉受益匪浅。整理出来,分享给大家。 建议使用自己编译的android os和虚拟机,这样就可以调...

SuShine
2015/10/08
37
0
Android开发中遇到的一个问题 明明存在该类却报错classnotfound

如题,下面贴报错地方的代码 public void setAdapter(PagerAdapter adapter) {if (mAdapter != null) {VerticalViewPagerCompat.setDataSetObserver(mAdapter, null);} mAdapter = adapter; ......

听风吹雪
2013/11/15
8.7K
5
简单工厂和工厂方法以及抽象工厂模式

工厂模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类 抽象工厂模式:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类 个人觉得这个区别在于产品,如果产...

王大叔爱编程
2014/09/26
0
0
Android中的设计模式之观察者模式

参考 《设计模式:可复用面向对象软件的基础 》5.7 Observer 观察者 对象行为型模式 《设计模式解析》 18.4 Observer模式 《Android源码设计模式解析与实战》第12章 解决,解耦的钥匙--观察者...

newtrek
08/29
0
0
设计模式初探--桥接模式想到的

今天公司大牛讲解案例桥接模式,由桥接模式想到了设计模式的6大原则。个人设计模式的理解总结以下: 最近这刚开始看设计模式,当然是从最基本的6大原则看起,所有的设计模式也基本上都是围绕...

宿命panthers
2016/08/09
23
0

没有更多内容

加载失败,请刷新页面

加载更多

00.编译OpenJDK-8u40的整个过程

前言 历经2天的折腾总算把OpenJDK给编译成功了,要说为啥搞这个,还得从面试说起,最近出去面试经常被问到JVM的相关东西,总感觉自己以前学的太浅薄,所以回来就打算深入学习,目标把《深入理...

凌晨一点
今天
2
0
python: 一些关于元组的碎碎念

初始化元组的时候,尤其是元组里面只有一个元素的时候,会出现一些很蛋疼的情况: def checkContentAndType(obj): print(obj) print(type(obj))if __name__=="__main__": tu...

Oh_really
昨天
6
2
jvm crash分析工具

介绍一款非常好用的jvm crash分析工具,当jvm挂掉时,会产生hs_err_pid.log。里面记录了jvm当时的运行状态以及错误信息,但是内容量比较庞大,不好分析。所以我们要借助工具来帮我们。 Cras...

xpbob
昨天
119
0
Qt编写自定义控件属性设计器

以前做.NET开发中,.NET直接就集成了属性设计器,VS不愧是宇宙第一IDE,你能够想到的都给你封装好了,用起来不要太爽!因为项目需要自从全面转Qt开发已经6年有余,在工业控制领域,有一些应用...

飞扬青云
昨天
4
0
我为什么用GO语言来做区块链?

Go语言现在常常被用来做去中心化系统(decentralised system)。其他类型的公司也都把Go用在产品的核心模块中,并且它在网站开发中也占据了一席之地。 我们在决定做Karachain的时候,考量(b...

HiBlock
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部