[list]
[下面是结合实际开发中的一些问题和我自己对接口的理解做个总结,我们主要从下面几个问题开始:
1. 什么是接口
2. 接口解决什么问题
3. 如果没有接口怎么解决
4. 在开发中如何正确和更好的应用
5. 接口不能做什么 (缺点)]
6. 现在使用中的一些问题
[/list]
[1. 1.关于接口的理解。(这段话是我在网上看到的感觉说的很有道理)
接口从更深层次的理解,应是定义(规范,约束,有一定通用性)与实现(名实分离的原则)的分离。
我们在一般实现一个系统的时候,通常是将定义与实现合为一体,不加分离的,我认为最为理解的系统设计规范应是所有的定义与实现分离,尽管这可能对系统中的某些情况有点繁烦。
接口的本身反映了系统设计人员对系统的抽象理解。
接口应有两类:第一类是对一个体的抽象,它可对应为一个抽象体(abstract class);
第二类是对一个体某一方面的抽象,即形成一个抽象面(interface);
一个体有可能有多个抽象面。
抽象体与抽象面是有区别的。
]
[list]
[2.接口解决什么问题:
1.解决实现与调用分离,耦合度降低
2.多种不同实现共同协作(例如如下例子更换数据库操作)
例如:填写员工基本信息保存到数据库中,数据库用的是Mysql。 ]
[/list]
[list]
[6.现在工作中的一些问题
下面是我一直疑惑的一个问题,也是很多初学者相信也有类似的疑惑:
在日常的应用都是定义一个类之前先定义一个接口,之前我有几个同学问我这样定义到底是什么意思,当时怎么回答的我也不记得了,只是别人都这么用我们也这么用肯定不会错的,现在才明白对Java的基础还是不扎实,只顾着写代码,去实现功能,没有深入的理解接口的涵义。其实在实际的开发中根本没有遇到要把某个模块重新实现的情况,我们只会在原来的基础上修改那些代码。]
[/list]
[下面是结合实际开发中的一些问题和我自己对接口的理解做个总结,我们主要从下面几个问题开始:
1. 什么是接口
2. 接口解决什么问题
3. 如果没有接口怎么解决
4. 在开发中如何正确和更好的应用
5. 接口不能做什么 (缺点)]
6. 现在使用中的一些问题
[/list]
[1. 1.关于接口的理解。(这段话是我在网上看到的感觉说的很有道理)
接口从更深层次的理解,应是定义(规范,约束,有一定通用性)与实现(名实分离的原则)的分离。
我们在一般实现一个系统的时候,通常是将定义与实现合为一体,不加分离的,我认为最为理解的系统设计规范应是所有的定义与实现分离,尽管这可能对系统中的某些情况有点繁烦。
接口的本身反映了系统设计人员对系统的抽象理解。
接口应有两类:第一类是对一个体的抽象,它可对应为一个抽象体(abstract class);
第二类是对一个体某一方面的抽象,即形成一个抽象面(interface);
一个体有可能有多个抽象面。
抽象体与抽象面是有区别的。
]
[list]
[2.接口解决什么问题:
1.解决实现与调用分离,耦合度降低
2.多种不同实现共同协作(例如如下例子更换数据库操作)
例如:填写员工基本信息保存到数据库中,数据库用的是Mysql。 ]
[/list]
//实现很简单定义员工类:
public Employee {
}
//定义接口
public IEmployeeDAO {
public int saveEmployee(Employee employee);
}
//定义EmployeeDAOImpl 类 实现IEmployeeDAO 接口
public EmployeeDAOImpl implements IEmployeeDAO {
public int saveEmployee(Employee employee);
}
//先公司将系统升级,数据改成Orcal
//我们只需将实现类更换掉就可以了 运行测试OK
3.如果没有接口怎么办
1.刚刚那个例子要更换数据库,就要重新定义EmployeeNewDAO类和saveEmployee方法。
上面的调用也要更改,工作量可想而知
4.开放中如何更好的应用
在实际的开发总如何更好的应用还在摸索和学习总,希望有看到这篇文章的人共同学习和 探讨.
5.接口不能做什么
接口不能有实现方法,有人说这是接口的缺点,但是这正是接口最高的价值,把实现封装了,接口不能new,接口可以实例子类
[list]
[6.现在工作中的一些问题
下面是我一直疑惑的一个问题,也是很多初学者相信也有类似的疑惑:
在日常的应用都是定义一个类之前先定义一个接口,之前我有几个同学问我这样定义到底是什么意思,当时怎么回答的我也不记得了,只是别人都这么用我们也这么用肯定不会错的,现在才明白对Java的基础还是不扎实,只顾着写代码,去实现功能,没有深入的理解接口的涵义。其实在实际的开发中根本没有遇到要把某个模块重新实现的情况,我们只会在原来的基础上修改那些代码。]
[/list]