JAVA语言提供了两种机制用于定义整个类型等级结构,抽象类与接口的主要区别体现在以下四个方面[JAVA与模式 P92]:
(1)抽象类可以提供方法的实现体,而接口只能定义方法的签名;
(2)JAVA中只能采用单一继承,每个类只能继承一个类,而接口却可以实现多个;
(3)从重构角度讲,从具体类提取出一个接口相对容易,只需抽取方法签名,然后具体类实现即可,但从具体类抽取方法到抽象类就显得困难得多,特别是具体类已扩展自一个类,这样的话只能一直往类型等级的高层移;
(4)基于接口可以实现多个,JAVA接口可以定义混口类型;
系统设计的开-闭原则,里氏替换原则,依赖倒转原则(依赖于抽象而不是依赖于具体类)都于抽象类和接口有很大的关系;
使用接口+抽象类的方式应该讲是个不错的选择,类型的定义由接口来提供,而默认的方法实现则由抽象类提供,这样具体类可以扩展自该接口,也可以extend自抽象类。这个是缺省适配器模式[JAVA与模式 P92]。
充份运用好接口和抽象类,可以为系统提供一套符合设计原则,而且能满足应用要求的类型等级结构。
阅读(839) | 评论(0) | 转发(0) |