在研究OpenJDK源码过程中,我发现常用的设计方法就是2种:接口,接口-抽象类-具体实现类 。
在一些其它开源框架和业务开发中,经常存在着第3种设计,接口-具体实现类。
1.只有接口,没有实现类。
定义接口,制定标准。
在Java中,这个最典型的案例是JDBC的API的设计。
Connection、Statement、PreparedStatement、CallableStatement、ResultSet等都是接口,没有任何实现方法。
这些接口就是一个标准,具体的实现,都是由数据库厂商自行实现。
2.接口-抽象类-具体实现类。
定义接口,确定系统架构。
通过抽象实现接口,实现复用。
通过具体实现类,提供面向用户的API。
在Java中,这个最典型的案例是集合框架I的设计。
定义Collection、List、Set、Map接口,然后有AbstractCollection、AbstractList、AbstractMap、AbstractSet等抽象实现,具体实现类ArrayList、LinkedList、LinkedHashSet、HashMap等,是在抽象类的基础上的具体实现。
第三方,如果需要实现自定义的集合,可以单独实现接口,或者继承抽象类和具体实现类来实现,从而扩展JDK自带的集合功能。
当然,第三方,也可以完全自定义自己的集合框架。
3.接口-具体实现类。
有接口和具体实现类,没有抽象类的情况,在OpenJDK源码中比较少见。
但是我们在实际开发中,有时会没有接口的抽象实现。
比如Java Web开发中,我们根据业务逻辑定义了系统的一些接口,比如系统内部的CRUD接口,系统之间的通信接口,我们完全可以根据需要,直接实现接口即可。
没有抽象类,通常是只需要一个具体实现。
或者,一个接口的通信双方,各自有自己的一套实现方式。
小结
常用的设计方法,就那么多。掌握那些经典的常见的方法,其它设计方法就很容易理解了。
接口、抽象类、实现类、设计模式,诸如此类,最终还是归结到面向对象。
在实践中,加深对面向对象的理解,诸如设计模式、设计方法等很多高级货,自然就理解了。
相关阅读
OpenJDK源码研究过程中整理的学习笔记。 OpenJDK是GPL许可(GPL-licensed)的Java平台的开源实现。
原文参见:http://FansUnion.cn/articles/3107(小雷网-FansUnion.cn)