浅显易懂的理解java中的接口
来源:互联网 发布:网络电视能接有线吗 编辑:程序博客网 时间:2024/05/28 15:58
接口的作用其实是提供你 在不改动原有代码的基础上 增加、改变类的功能。那么为什么在设计模式里应用广泛呢?因为在面向对象的设计原则中有那么一条开放封闭原则,内容大致如下:一个良好的设计应该可以在不改动原有代码或者改动少数代码的基础上增加或者改变原有的功能。因此接口正好符合这一需求。接下来看一下代码实例你就会明白。以下代码是模仿JDBC的设计原则所写的,并不是原代码,但是设计思想是一致的,之所以选择这样一个例子是因为你可以对接口的应用有一个感性的认识
假设read()方法从数据库里读取一个数据。由于不同数据库的读数据的实现方法各有不同,因此Java如何统一这一差异呢?
interface readData
{
object read();
}
好,Sun把JDBC里读取数据的接口定义成这样。那么厂商A在自己产品的JDBC驱动里这样实现:
class dbReader implements readData
{
public object read()
{
//与厂商A数据库相关的读取操作实现
}
}
好了,那么你在你的程序里使用了厂商A的数据库,因此你要用他的JDBC驱动来写程序:
class dbProgram
{
//加载驱动
//调用相应的JDBC方法取得connection等必要对象
object readData=read();//这里的read()方法在JDBC的接口中定义过
}
至此,你完成了对于数据库的读取。到此为止一切顺利。
一天,你的程序由于种种原因要使用厂商B的数据库驱动了(也许是你的客户要求这么做,也许是厂商A倒闭了,他的数据库再也不是主流了)。那么你很幸运,因为你使用Java,你使用JDBC访问数据库。你的代码会如何改动呢?通常如果你的数据库变动的话会造成对代码的巨大变动,但是现在,使用JDBC(注意JDBC是一套接口规范)的话,你只要改变你加载的JDBC驱动就可以了,以下的代码一律不用更改。为什么呢?因为厂商A和B的驱动都符合JDBC规范是吧?因此都实现了readData接口中的read()这个方法对吗?这样虽然你更换了数据库,但是你的程序其实是调用了对应数据库的read()方法,因此你可以不改变读取代码而只是更改要加载的数据库驱动就可以。那么Java又是如何实现动态的调用呢?面向对象的程序中可以这样引用一个实现了某个接口的类的实例:readData rd=new dbReader();//接口名称 变量名=new 实现了接口的类的名称()
调用接口中的方法就可以这样,rd.read()
可以看到,在代码中始终可以用接口类型的变量来引用具体实现他的类。这样的好处是不管类的具体实现怎么变,由于他必须实现接口中定义的方法,所以我们始终可以保证用readData接口类型的变量能够调用到具体实现这个接口的类的read()方法。
上面的例子由于是自己乱编的所以我在以实际的JDBC应用来举个例,希望大家能够彻底的弄懂。
import java.sql.*;
public class first{
public static void main(String args[])
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
URL url=" jdbc:odbc:tic ";
Connection db=DriverManager.getConnection(url,"fisher","yht8125");
Statement sq_stmt=db.createStatement();
String sql_str="select * from tic";
ResultSet rs=sq_stmt.executeQuery(sql_str);
}
假设read()方法从数据库里读取一个数据。由于不同数据库的读数据的实现方法各有不同,因此Java如何统一这一差异呢?
interface readData
{
object read();
}
好,Sun把JDBC里读取数据的接口定义成这样。那么厂商A在自己产品的JDBC驱动里这样实现:
class dbReader implements readData
{
public object read()
{
//与厂商A数据库相关的读取操作实现
}
}
好了,那么你在你的程序里使用了厂商A的数据库,因此你要用他的JDBC驱动来写程序:
class dbProgram
{
//加载驱动
//调用相应的JDBC方法取得connection等必要对象
object readData=read();//这里的read()方法在JDBC的接口中定义过
}
至此,你完成了对于数据库的读取。到此为止一切顺利。
一天,你的程序由于种种原因要使用厂商B的数据库驱动了(也许是你的客户要求这么做,也许是厂商A倒闭了,他的数据库再也不是主流了)。那么你很幸运,因为你使用Java,你使用JDBC访问数据库。你的代码会如何改动呢?通常如果你的数据库变动的话会造成对代码的巨大变动,但是现在,使用JDBC(注意JDBC是一套接口规范)的话,你只要改变你加载的JDBC驱动就可以了,以下的代码一律不用更改。为什么呢?因为厂商A和B的驱动都符合JDBC规范是吧?因此都实现了readData接口中的read()这个方法对吗?这样虽然你更换了数据库,但是你的程序其实是调用了对应数据库的read()方法,因此你可以不改变读取代码而只是更改要加载的数据库驱动就可以。那么Java又是如何实现动态的调用呢?面向对象的程序中可以这样引用一个实现了某个接口的类的实例:readData rd=new dbReader();//接口名称 变量名=new 实现了接口的类的名称()
调用接口中的方法就可以这样,rd.read()
可以看到,在代码中始终可以用接口类型的变量来引用具体实现他的类。这样的好处是不管类的具体实现怎么变,由于他必须实现接口中定义的方法,所以我们始终可以保证用readData接口类型的变量能够调用到具体实现这个接口的类的read()方法。
上面的例子由于是自己乱编的所以我在以实际的JDBC应用来举个例,希望大家能够彻底的弄懂。
import java.sql.*;
public class first{
public static void main(String args[])
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
URL url=" jdbc:odbc:tic ";
Connection db=DriverManager.getConnection(url,"fisher","yht8125");
Statement sq_stmt=db.createStatement();
String sql_str="select * from tic";
ResultSet rs=sq_stmt.executeQuery(sql_str);
}
- 浅显易懂的理解java中的接口
- 大数据系统的浅显易懂理解
- 理解Python中的装饰器(转载) -- 浅显易懂
- IOC与DI的浅显易懂的理解
- 转一篇浅显易懂的多线程同步理解
- javascript的【原型】【prototype】理解-【浅显易懂】【彻底搞明白】
- 浅显易懂的经济学常识
- 浅显易懂的Git教程
- 浅显易懂的桶排序
- 浅显易懂的Activity生命周期
- DBN的浅显易懂解释
- 浅显易懂的Git教程
- NIO浅显易懂的入门
- 为什么要接口继承接口 浅显的理解
- java浅显易懂解释return相关
- 深入理解C++的动态绑定和静态绑定--一个牛人写的文章,浅显易懂
- 一个浅显易懂的分页类
- 一个浅显易懂的分页类
- 计算一个时间距离今天还有多少天
- SAP R/3 Instances and Clients
- c语言中的字符串替换函数
- jQuery进度条插件 jQuery progressBar
- Windows 版本号以及各个版本概述
- 浅显易懂的理解java中的接口
- android多分辨率支持[最新版,包括Extra Large screen]
- 正向代理 反向代理
- 中断和异常处理程序的嵌套执行
- PHP商品秒杀倒计时
- 数据库连接池技术中dbcp、c3p0、jndi
- Linux下无法产生core dump的问题与解决
- Windows Azure的数据存储和性能比较(三)
- 初始化中断描述表