这个是自己的理解,因为我也是刚开始编程的菜鸟,所以会有很多错误,欢迎大家指导!
首先按我的理解来说一个例子(这个例子被很多人提过,下面的这个是按我自己的理解来说的):
小王是一个苦逼(酷毙)程序员,他要开发一个程序,其中要实现一个功能:连接到一个数据库,要对数据库进行一些操作。实现功能首先需要有一个数据库,在开发的时候他使用的A厂家的数据库。假设A厂家提供的类库中实现小王需要的功能的类是DataA,小王创建一个DataA实例,然后调用DataA类中的方法。假设DataA类连接数据库的方法为ConnectA,修改数据库中数据的方法为ChangeA,关闭数据库连接为CloseA。则小王实现功能要写的代码大致为:
DataA xiaowang = new DataA(); //创建DataB类的实例 xiaowang.ConnectA(); //连接数据库 xiaowang.ChangeA(); //修改数据库数据 xiaowang.CloseA(); //修改完毕,关闭数据库连接
程序大概是这个样子。
不幸的是A厂家倒闭了。而且DataA设计有严重的缺陷,不可以继续使用了。发现这个的时候小王这个项目已经完成了。现在老板对他说这个项目不可以使用A厂家的类库了,你还是使用B厂家的吧。没办法小王又要学习B类库的内容,B厂家提供类库中实现小王需要的功能的类是DataB,连接数据库的方法是ConnectB,修改数据库中数据的方法为ChangeB,关闭数据库连接的方法为CloseB。小王开始修改上面的代码。修改完代码的样子大致如下:
DataB xiaowang = new DataB(); //创建DataB类的实例 xiaowang.ConnectB(); //连接数据库 xiaowang.ChangeB(); //修改数据库数据 xiaowang.CloseB(); //修改完毕,关闭数据库连接
看代码,小王要把所有的代码全部都改掉。如果要实现这个功能要使用很多方法呢,这些方法可能都需要改掉。而且一个项目中要实现很多的功能,如果所有功能实现的方法都需要改的话,那简直就是噩梦呀。
这个就是不用接口的坏处。
这时候,这个行业的裁判,就提出我们定义一个规范(接口)吧。你们所有的数据库厂家提供的这个类库都必须遵守这个规范(实现这个接口)。下面我定义下这个接口....接口名为IData。这个接口中有下面的几个方法(不实现)。Connect()是连接数据库、Change()是修改数据库中的数据、Close()关闭数据库(不需要具体实现,当各个厂家实现这个接口的时候,就必须具体实现这些方法)。
在有这些规范的情况下,重复上面的情景(并且A、B厂家都遵守规范)。
当小王使用A厂家提供的类库时写的代码大致如下:
IData xiaowang = new DataA(); xiaowang.Connect(); //连接数据库 xiaowang.Change(); //修改数据库中的数据 xiaowang.Close(); //关闭数据库连接
项目开发完成A厂家倒闭(......)。换用B厂家的类库,实现这个功能的代码要修改成如下的样子:
IData xiaowang = new DataB(); xiaowang.Connect(); //连接数据库 xiaowang.Change(); //修改数据库中的数据 xiaowang.Close(); //关闭数据库连接
实际上,修改的内容就只是把DataA类库改成DataB类库就好了,因为Connect,Change,Close方法都是接口定义的方法,dataA和dataB都会实现的。这样在项目修改的时候就很大程度的减少了程序员的工作量,而且在理想的情况下,小王开发数据库功能的时候,就只需要学习这个接口就可以了,没必要去关心每个厂家的类库,这样也就减少了学习的成本。