接口的理解

  这个是自己的理解,因为我也是刚开始编程的菜鸟,所以会有很多错误,欢迎大家指导!

  首先按我的理解来说一个例子(这个例子被很多人提过,下面的这个是按我自己的理解来说的):

  小王是一个苦逼(酷毙)程序员,他要开发一个程序,其中要实现一个功能:连接到一个数据库,要对数据库进行一些操作。实现功能首先需要有一个数据库,在开发的时候他使用的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都会实现的。这样在项目修改的时候就很大程度的减少了程序员的工作量,而且在理想的情况下,小王开发数据库功能的时候,就只需要学习这个接口就可以了,没必要去关心每个厂家的类库,这样也就减少了学习的成本。

原文地址:https://www.cnblogs.com/blackcatcjy/p/3885809.html