﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-sky.wind's Blog</title><link>http://www.blogjava.net/skywind/</link><description>success.</description><language>zh-cn</language><lastBuildDate>Thu, 07 May 2026 01:47:03 GMT</lastBuildDate><pubDate>Thu, 07 May 2026 01:47:03 GMT</pubDate><ttl>60</ttl><item><title>面向接口编程的好处</title><link>http://www.blogjava.net/skywind/archive/2011/06/02/351638.html</link><dc:creator>sky.wind</dc:creator><author>sky.wind</author><pubDate>Thu, 02 Jun 2011 15:04:00 GMT</pubDate><guid>http://www.blogjava.net/skywind/archive/2011/06/02/351638.html</guid><wfw:comment>http://www.blogjava.net/skywind/comments/351638.html</wfw:comment><comments>http://www.blogjava.net/skywind/archive/2011/06/02/351638.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/skywind/comments/commentRss/351638.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/skywind/services/trackbacks/351638.html</trackback:ping><description><![CDATA[<div>面向接口的编程正是java的优点，首先 用起来方便，结构清晰<br />
<br />
在j2ee中的接口也就是类，类与类之间的通信因为接口而变的简单易懂<br />
<br />
呵呵，像J2EE中的API规范基本上都是接口，由各应用服务器来实现，比如：WebSphere按照这个接口实现自己的，WebLogic也按照这个接 口实现自己的，作为开发者来说我们根本就不用去管谁是怎样实现的，只要按照J2EE的API<br />
来写就可以了，根本用不着导入它们的实现包，实际上具 体的是由它们自身完成了。<br />
<br />
接口说白了，也就是定死了一个框，具体的是糊红纸还是糊黑纸我们都用不着去管的，我们只要知道它是个框，提供<br />
了 哪些方法就够了。<br />
<br />
举个简单的JDBC的例子吧，比如有个BaseDao接口，现在有MySQLDao实现了一个（我们可以把具体的实现类 配在配置<br />
文件中，再通过反射进行实例化），也就类似这样的：<br />
<br />
BaseDao dao = (BaseDao)(Class.forName(Config.getDaoName()).newInstance());<br />
<br />
其中 Config.getDaoName()可以获得配置文件中的配置，比如是：com.bao.dao.impl.MySQLDao。<br />
<br />
之 后，那些人开始要烧钱了，要改用Oracle了，这样我们只要按BaseDao的定义，再实现一个OracleDao就可以了，<br />
再将配置文件中的 配置改为：com.bao.dao.impl.OralceDao就可以了，而在已经写好的代码中，我们可以一行不<br />
改的进行了数据库移植，这个就 是面向对象设计原则中的&#8220;开-闭原则&#8221;（对增加是开放的，对修改是封闭的）。但<br />
这只是理论上的，现实中很难做到的。<br />
<br />
接口 = 电脑的USB插口!<br />
<br />
因为接口订好了，所以那面到底插的是什么就不重要了！<br />
我们用户只需要<br />
1 插上去<br />
2 停用移动设备<br />
3 拔下来<br />
<br />
这三个就好似USB的接口功能。他隐藏了实际功能，但提供给用户统一的操作界面和使用方式<br />
<br />
写小的应用程序看不到接口的优势，写大点的程序马上就显示出接口的优势，越大越明显．所以还是从现在开始养成面向接口编程的习惯．写多了程序就会觉得优势 显而易见．<br />
<br />
链条组装起来了,然后向上面挂东西.....挂的东西可以随时拿下来,可以随时替换掉,可以随时安上去.......<br />
<br />
子类只能继承一个父类<br />
却可以继承多个接口..功能区分清晰，改起来方便<br />
够了吧<br />
多给点<br />
<br />
优点：<br />
接口和实现分离了，适于团队的协作开发。 </div>
<br />
<div>更具体的优点：可以参看IDP原则。<br />
<br />
缺点：<br />
设计难了，在你没有写实现的时候，就得想好接口，接口一变，全部乱套，这就是 所谓的设计比实现难。<br />
<br />
主要为了实现松散耦合的系统，便于以后升级，扩展．你去研究一下spring吧，那东东会让你真正体会到interface的优点．<br />
<br />
接口，主要是为了 弥补 JAVA 丢失的 多继承性 的特点吧 。。。<br />
<br />
封装好，好使用<br />
<br />
易扩展<br />
<br />
容易让人把编写程序和现实联系起来。呵呵<br />
<br />
接口在项目中用的比较多的原因是，当你调用别人的接口时可以不用部署，直接引用就行了。<br />
<br />
我记得我曾经在一篇帖子中提到过，一个接口可以从三方面去考察：<br />
<span style="color: #ff0000;">制 定者（或者叫协调者）</span>，<span style="color: #ff0000;">实现者（或者叫生产者）</span>，<span style="color: #ff0000;">调用者（或者叫消费者）</span>。<br />
<br />
接口本质上就是<span style="color: #ff0000;">由制定者来协调实现者和调用者之间的关系</span>。<br />
<br />
所以通常说的 &#8220;面向接口编程&#8221;可以理解为：<br />
<span style="color: #ff0000;">只有实现者和调用者都遵循&#8220;面向接口 编程&#8221;这个准则，制定者的协调目的才能达到。</span><br />
<br />
一个老生常谈的例子就是JDBC。<br />
<br />
很多人费解：既然我每连接 一种数据库（如mysql）都要事先部署驱动程序，那我直接访问驱动程序不就行了？还要JDBC干吗？<br />
<br />
实际上，JDBC已经起了至关重要 的作用了：正因为驱动程序是按照JDBC所规定的方法编写的，你才可以按照JDBC的方式去使用。<br />
换句话说，如果驱动程序提供者不按照JDBC标 准来编写，而是按它自己独创的方式编写，那么你在使用驱动程序的时候就要花时间查看驱动程序的文档以搞清楚用法。而当你日后决定使用另一种数据库的时候， 这种数据库的驱动程序也不是按照JDBC编写的，你又得去搞清楚另一套完全不同的用法，而你的所有代码都必须做相应的更改。这种代价是不可想象的。<br />
<br />
而 现在的情况是，驱动程序提供者都按照JDBC规定的方式来编写，程序员都按照JDBC规定的方式来使用。程序员不用关心自己正在使用何种数据库，而驱动程 序编写者也不用费尽心力去编写接口文档来向程序员解释驱动程序的用法，大家都向标准看齐就行了。<br />
<br />
转载自：<a href="http://www.java123.net/JavaSE/mianxiangjiekoubianchengdehaochuheyoudian_7139.html">http://www.java123.net/JavaSE/mianxiangjiekoubianchengdehaochuheyoudian_7139.html</a><br /><br />
</div><img src ="http://www.blogjava.net/skywind/aggbug/351638.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/skywind/" target="_blank">sky.wind</a> 2011-06-02 23:04 <a href="http://www.blogjava.net/skywind/archive/2011/06/02/351638.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>