好处:
接口和实现分离了,适于团队的协作开发。
更具体的优点:可以参看IDP原则。
J2EE中的API规范基本上都是接口,由各应用服务器来实现,比如:WebSphere按照这个接口实现自己的,WebLogic也按照这个接口实现自己的,作为开发者来说我们根本就不用去管谁是怎样实现的,只要按照J2EE的API
来写就可以了,根本用不着导入它们的实现包,实际上具体的是由它们自身完成了。
接口说白了,也就是定死了一个框,具体的是糊红纸还是糊黑纸我们都用不着去管的,我们只要知道它是个框,提供
了哪些方法就够了。举
个简单的JDBC的例子吧,比如有个BaseDao接口,现在有MySQLDao实现了一个(我们可以把具体的实现类配在配置
文件中,再通过反射进行实例化),也就类似这样的:
BaseDao dao = (BaseDao)(Class.forName(Config.getDaoName()).newInstance())
.其中Config.getDaoName()可以获得配置文件中的配置,比如是:com.bao.dao.impl.MySQLDao。
要改用Oracle了,这样我们只要按BaseDao的定义,再实现一个OracleDao就可以了,
再将配置文件中的配置改为:com.bao.dao.impl.OralceDao就可以了,而在已经写好的代码中,我们可以一行不
改的进行了数据库移植,这个就是面向对象设计原则中的“开-闭原则”(对增加是开放的,对修改是封闭的)
但这只是理论上的,现实中很难做到的。
不知道怎么给你说清楚形象一点,c语言是面向过程编程,就是按程序执行的顺序编
而c++和java都是面向对象编程,他们把变量和方法都封装到类里面,通过对象执行程序
但是c++中的类是可以继承的,而JAVA的不能继承,只能通过实现接口来完成类似于c++继承的功能,从这个角度看java是面向接口编程
通过接口来调用一个类及其方法,而不是直接建立类实体来调用类。比如将来你要把这个被调用的类换成一个别的实现类时,你就不用去把调用过它的类一个个改掉了,因为它们调的是接口,接口没变,在配置里把接口的实现类换成新的类,就全部都替换掉了
这就是解耦,提高可维护性
interface 动物 {
void 叫()
}
class 狗 implements 动物 {
void 叫() {
System.out.println("汪")
}
}
class 猫 implements 动物 {
void 叫() {
System.out.println("喵")
}
}
class test{
private 动物 我的宠物
public static void main() {
我的宠物.叫()
}
}
现在你可以把我的宠物随便换成狗类或猫类都行了,main方法不用改。
针对实现编程就是
new 狗()
狗.叫()
换了猫再改一次main方法
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)