一个关于接口的问题,大家来研究一下!

05-04-29 JackSilence

假设我有很多个类,分别是Mysql.java、SQLServer.java、Oracle.java、DB2.java,他们分别连接不同的数据库,统一返回一个Connection对象,并且都有一个close方法,用于关闭连接。只需要针对你的DBMS,选择不同的类,就可以用了,但是我的用户他会使用什么数据库?我不知道,我希望的是尽量少的修改代码,就能满足他的需要。我可以抽象如下接口:

package org.bromon.test;

public interface DB

{

java.sql.Connection openDB(String url,String user,String password);

void close();

}

这个接口只定义两个方法,没有任何有实际意义的代码,具体的代码由实作这个接口的类来给出,比如Mysql.java:

Package org.bromon.test;

import java.sql.*;

public class Mysql implements DB

{

private String url=”jdbc:mysql:localhost:3306/test”;

private String user=”root”;

private String password=””;

private Connection conn;

public Connection openDB(url,user,password)

{

//连接数据库的代码

}

public void close()

{

//关闭数据库

}

}

类似的当然还有Oracle.java等等,接口DB给这些类归了个类,在应用程序中我们这样定义对象:

org.bromon.test.DB myDB;

使用myDB来操作数据库,就可以不用管实际上我所使用的是哪个类,这就是所谓的“开-闭”原则。但是问题在于接口是不能实例化的,myDB=new DB(),这样的代码是绝对错误的,我们只能myDB=new Mysql()或者myDB=new Oracle()。麻烦了,我还是需要指定具体实例化的是哪个类,用了接口跟没用一样。所以我们需要一个工厂:

package org.bromon.test;

public class DBFactory

{

public static DB Connection getConn()

{

Return(new Mysql());

}

}

所以实例化的代码变成:myDB=DBFactory.getConn();

其中说的使用myDB来操作数据库,就可以不用管实际上我所使用的是哪个类,是什么意思?

而且,他这个工厂类DBFactory里面只实现了Mysql的连接类,其他的如oracle,又该怎么办啊?也是在DBFactory里定义吗?

SportsBaby1980
2005-04-30 02:41
这不就是个标准的策略模式吗?

mythmoon
2005-04-30 18:21
提个建议写个db.properties即安全,又方便更改

banq
2005-05-01 18:29
典型的DAO模式

桥模式和变压器模式结合。

猜你喜欢