站长原创,版权所有ITEEDU,2009-9-30
接口是最高层次的抽象,只定义了提供的功能,人们遵循的法则,离了变和不变,让人们按同一轨迹行事。接口的强制性表现在实现接口时,必实现其所有接口,哪怕做一个空的也要写。
定义一种规范,一种对外提供的功能。
约束人们的行为。
接口的作用:
为用户提供统一的操作界面。
屏蔽了底层的不同的具体的复杂的实现。
防止底层的各种变动(优化,整体变革)对高层(应用接口的那层)的影响。
方便了多态的实现。接口不可以有实例,但可以有引用。new Yyy()出的是实例,Xxx name得到的是引用。
接口的引用可以指向任何一个实现现了它的类实例。例子:
JDBC:
各大数据库厂商和SUN公司制定的JDBC规范只是一系列java接口。实现由厂商自己编制驱动包。
java.sql包中提供的只是接口和一些不常用的类(除了DriverManager类)。
DriverManager为一个工厂类,提供的各用方法,最重要的是getConnection()。
DriverManager会根据载入的不同的驱动创建连接。
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn =DriverManager.getConnection("jdbc:odbc:grade");
Statement stmt =conn.createStatement();
ResultSet rs =stmt.executeQuery("SELECT * FROM grade");
上述左端的为创建的引用,右端为驱动包中具体类创建的实例。
*任何类型(关系,面向对象,XML,树状,层次),任何厂商(MYSQL,DB2,ORICAL…)的数据库只要实现了jdbc的接口,就可以用java调用。就算将来数据库由关系型变革到面向对象型或XML,用通过JDBC调用数据库的程序一点也不用变。
*这就是规范的力量。
Servlet:
javax.servlet由一部分接口和一部分类组成。和具体协议无关的部分用接口实现(即所有协议都要有的),一些和协议无关(都要有的)或很繁琐的基础方法由一些类来实现。
javax.servlet.http中的接口的类大多继承自javax.servlet,添加了一些和http协议相关的部分。
*这些规范是为Servlet容器定置的,如何实现由不同的窗口而异,如Tomcat和Jboss等。
*这就是分离变与不变的力量。编程规范:
先用接口定义程序对外提供的接口和功能,再用具体的类实现。
这样从细节中摆脱出来,只关注高层的抽象,是一用很好的设计方法。
在极端情况下,类里的public方法都是继承自接口的实现。
类里的public方法即类的对象可为外部提供的功能接口。