Posted on 2005-09-22 23:12
射手座的我 双子座的她 阅读(1715)
评论(0) 编辑 收藏 所属分类:
JAVA
接口 Interface
没有方法体,只有抽象方法, implements接口时候必须实现该接口所定义的所有的抽象方法
可以implements多个接口 用,号间隔.
抽象类 Abstract
可以有一部份实现方法,也可以有抽象方法,
只可以extends一个抽象类
二者都是不可实例化
假设我们需要做一个支持多种数据库的项目,但是数据库之间有存在的差别,难道我们就要为不同的数据库开发不同的系统?答案是NO!
我们可以将多种数据库所有的方法抽象出来,写成一个个的方法组合到一个接口中
然后有多少种数据库我们就写几个这样的类实现这个接口
具体如下:
我们首先把所有的抽象方法组合到一个DataOperate的接口中
public interface DataOperate{
Connection createConn(); /*建立连接*/
void closeConn(); /*关闭连接*/
ResultSet getRs(); /*返回结果集*/
boolean exec(); /*执行语句*/
boolean isClose(); /*公共方法 查看连接状态*/
}
定义完接口 我们再创建一个抽象类 来实现公共的方法isClose()
public abstract class AbstractDataOperate implements DataOperate{
public Connection createConn(){
return null;
}
public void closeConn(){
}
public ResultSet getRs(){
return null;
}
public boolean exec(){
return fasle;
}
/**
*公共方法的实现
**/
public boolean isClose(){
if(conn!=null)
return false;
else
return true;
}
}
接下来我们分别写3个类OracleDataOperate,SqlServerDataOperate,MySqlDataOperate继承AbstractDatOperate具体实现方法 这里不再叙述
好了 现在最后一步 写一个工厂方法来统一得到数据库操作类的实例
public class DataOperateFactory{
public static final int OracleKey=1;
public static final int SqlServerKey=2;
public static final int MySqlKey=3;
public static int DbType =OracleKey;
private static DataOperate db;
public static DataOperate getInstance(){
if(db==null){
if(DbType==OracleKey)
db=new OracleDataOperate();
else if(DbType==SqlServerKey)
db=new SqlServerDataOperate();
else if(DbType==MySqlKey)
db=new MySqlDataOperate();
}
return db;
}
}
Ok 到此所有工作都完成 来测试吧
public class MyTest{
public static void main(String args[]){
DataOperate db=AbstrctDataOperate.getInstance();
db.createConn();
}
}
在MyTest类里根本没有出现OracelDataOperate、MysqlDataOperate等的影子,这就是接口的威力。客户端不必针对OracelDataOperate等写不同的代码,它只关心DataOperate即可,具体要取那个类的逻辑就由DataOperateFactory负责了。
如果还有新的数据库添加的话 只需要象OracleaDataOperate那样 再写一个这样类 继承AbstractDataOperate类 然后在工厂类里DataOperateFactory加上相应的代码即可