A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

我们都知道,接口就是一个特殊的类,里面全是一些常量和未实现的方法,子类实现了这些方法才能用。
而且接口又不能实例化,还必须用子类去实例化父类的接口,既向上转型。
既然这样,我们还不如直接用子类实例化子类的对象得了。可能大家刚开始都有这些疑惑。

那既然这样,就说明接口的设计目的根本不是这个,简单来说就是,让程序好扩展。
现在的软件,越做越大,设计就更困难,所以各个模块之间要分工明确,那样才能健壮并且容易扩展,
那么,接口就很好的做到了这一点,那么,怎么样设计才能让软件充分利用接口好扩展的这个作用呢,那就是面向接口编程
下面给大家一个示例,这个例子主要讲解了在连接数据库的一种设计模式:
说先定义一个接口,代码如下:
public interface IDataBase {              //仅仅是个很简单的接口
public Connection dataBaseConnection();}

下面再给大家做两个实现类:
public class SqlDataBase implements IDataBase{          //这个类主要用来实现连接sql数据库的作用
public Connection dataBaseConnection() {
  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
  Connection con = DriverManager.getConnection("jdbc:odbc:student","username","password");
  return con;}}

class OracleDataBase implements IDataBase{     //这个类用来实现连接oracle数据库的作用
public Connection dataBaseConnection() {
  Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
  Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:student","username","password");
  return con;}}

class DB2DataBase implements IDataBase{        //这个类用来实现连接DB2数据库的作用
public Connection dataBaseConnection() {
  Class.forName("com.ibm.db2.jdbc.app.DB2Driver").newInstance();
  Connection con=DriverManager.getConnection("jdbc:db2//localhost/student","username","password");
  return con;}}
我们定义一个业务类:GetConnection类
public class GetConnection{
private IDataBase iDataBase=null;               //这个业务类就是用来连接各种数据库的作用,只要将实现类的对象传递给这个类的构造函数,就能实现连接数据库的功能了
public GetConnection(IDataBase iDataBase){
  this.iDataBase=iDataBase;
}
public Connection getConnect(){
  return iDataBase.dataBaseConnection();}}

public class TestCase {                            //测试类  
public static void main(String[] args){
  GetConnection getConnection=new GetConnection(new OracleDataBase());            
  Connection con=getConnection.getConnect();}}   
                  
现在再来谈谈扩展性,如果今后想要连接我们上面没有的数据库,只需要实现上述接口,然后在实例化业务类的构造函数的时候,传递实现接口的类的对象即可。

那么我们假设现在没有接口,业务类里面就必须把每中数据库连接分别写一个构造函数,然后我们才能在调用业务类的时候传任意的类对象。还有更糟糕的是,

如果今后想要传递我们上述还没有实现的其它数据库,比如mysql ,sybase数据库等,不仅仅要实现上述接口,还要在业务类中又添加一个新的构造函数。

如果我们的代码仅仅这么少,那也没什么,可是现在的大型软件,可能会遇到很多这样的代码,这非常不利于工作人员维护,所以,上面这种面向接口编程的优点就

体现出来了。只需要实现了接口即可,不需要改动业务类的任意内容。

总结:以上是个人理解,上面的代码也是自己随便写的,其中我用的是sql数据库,连接其他数据库的代码我是网上找的,不知道能不能行得通,这里主要是为了给大家讲
一下个人的理解,如果有不足之处还请大家指出,谢谢。


   

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马