文档章节

由抽象类DataSetObserver想到的

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

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

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

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

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

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

© 著作权归作者所有

共有 人打赏支持
上一篇: Timer设计原理
亭子happy
粉丝 118
博文 203
码字总数 45713
作品 0
海淀
程序员
私信 提问
追溯源码解决android疑难问题1--Viewpager之notifyDataSetChanged

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

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

如题,下面贴报错地方的代码 当中 会提示 ClassNotFound,找不到这个DataSetObserver类,但是我在同一个文件中,自己新建了个这个类,代码如下 很疑惑,求解答

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

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

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

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

newtrek
08/29
0
0
修改Conversion to Dalvik format failed

Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Landroid/support/v4/view/VerticalViewPagerCompat$DataSetObserver; 添加到libs文件夹下,就在a......

gavin_jin
2014/04/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

崛起于Springboot2.X之通讯WebSocket(40)

技术简介:Springboot2.0.3+freemaker+websocket 1、添加pom依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-bo......

木九天
6分钟前
0
0
Java常用四大线程池用法以及ThreadPoolExecutor详解

为什么用线程池? 1.创建/销毁线程伴随着系统开销,过于频繁的创建/销毁线程,会很大程度上影响处-理效率 2.线程并发数量过多,抢占系统资源从而导致阻塞 3.对线程进行一些简单的管理 在Java中...

孟飞阳
8分钟前
0
0
Netty+Websocket 实现一个简易聊天室

后台代码 /** * 服务端 */public class ChatServer {public static void main(String[] args) throws Exception {int port=8080; //服务端默认端口new ChatServer().bind...

这很耳东先生
10分钟前
0
0
一个本科学生对Linux的认知

我是一名大三的普通一本大学的软件工程的一名学生,学校开设了一些关于系统开发的课程,纸上得来终觉浅,学校的课程课时较短,想要在56个课时之内学会一些公司需要的技能,无疑是纸上谈兵,一...

linuxprobe16
11分钟前
0
0
如何选择开源许可证?

如何为代码选择开源许可证,这是一个问题。 世界上的开源许可证,大概有上百种。很少有人搞得清楚它们的区别。即使在最流行的六种----GPL、BSD、MIT、Mozilla、Apache和LGPL----之中做选择,...

吴伟祥
13分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部