0.参考文献
参考1:http://tkhhappyboy.blog.163.com/blog/static/114185815201112473727410/
参考2:http://milenfan.iteye.com/blog/756060
参考3:http://java.chinaitlab.com/model/758440.html
参考4:http://www.the2ndmoon.net/weblog/?p=212
1.概述
缺省适配模式为一个接口提供缺省实现(本例中接口InterfaceA的缺省实现是AbstractClassB),这样的类型可以从这个缺省实现(AbstractClassB)进行扩展(本例中ClassBImplFun1和ClassBImplFun5都是继承AbstractClassB),而不必从原有接口进行扩展。当原接口中定义的方法太多,而其中大部分又不被需要时,这种模式非常实用。由缺省适配器类(AbstractClassB)直接实现接口(InterfaceA),并为所有方法提供缺省的空实现。用户类就只需要继承适配器类,只实现感兴趣的方法就行了。
- InterfaceA:目标接口。可能定义有很多方法,但这些方法不一定全都被用户类所需要。
- AbstractClassB:缺省适配模式的核心。它实现InterfaceA接口,为所有方法提供空的实现(也就是{}的空实现)。
- ClassBImplFun1:用户类,它需要实现InterfaceA接口。但因为InterfaceA方法众多,而ClassBImplFun1中对其中一两个方法(比如这里的Fun1())感兴趣。如果直接实现InterfaceA,就需要提供众多的空方法。所以它继承AbstractClassB,只需要重写它感兴趣的方法即可。既实现了InterfaceA接口,又省去了定义空方法的麻烦。
模式结构如下图所示:
结构解释
上述结构中,InterfaceA中只定义了方法,而AbstractClassB中只对方法进行空实现(就是{})。而在AImpl中对接口中定义的方法进行了具体实现。ClassBImplFun1中对AbstractClassB中的fun1()进行了重写,是具体实现;ClassBImplFun5中对AbstractClassB中的fun5()进行了重写,是具体实现。
2.代码示例
InterfaceA
AbstractClassB
ClassBImplFun1
ClassBImplFun5
AImpl
main
上述程序的运行结果是:
ClassBImplFun1调用fun1()
ClassBImplFun5调用fun5()
3.再谈Java 接口和抽象类区别
ClassBImplFun1调用fun1()
AbstractClassB调用fun6()
ClassBImplFun5调用fun5()
ps:2012-4-11
上述示例代码的类图如下图所示:
本文转自xwdreamer博客园博客,原文链接:http://www.cnblogs.com/xwdreamer/archive/2012/03/29/2424008.html,如需转载请自行联系原作者