本篇文章讲解的知识点主要围绕面向对象中的接口(行为),废话不多说,只分享Java相关的干货!
在
java
中接口其实描述了类需要做的事情,类要遵循接口的定义来做事,使用接口到底有什
么本质的好处?可以归纳为两点:
- 采用接口明确的声明了它所能提供的服务
- 解决了 Java 单继承的问题
- 实现了可接插性(重要)
示例:完成学生信息的增删改操作,系统要求适用于多个数据库,如:适用于
Oracle
和
MySQL
;
- 第一种方案,不使用接口,每个数据库实现一个类:
-
//Oracle 的实现
-
public
class StudentOracleImpl {
-
-
-
public void add(int id, String name) { System.out.println(
"StudentOracleImpl.add()");
-
}
-
-
public void del(int id) { System.out.println(
"StudentOracleImpl.del()");
-
}
-
-
public void modify(int id, String name) { System.out.println(
"StudentOracleImpl.modify()");
需求发生变化了,客户需要将数据移植Mysql 上
-
Mysql 的实现
-
public
class StudentMysqlImpl {
-
-
public void addStudent(int id, String name) { System.out.println(
"StudentMysqlImpl.addStudent()");
-
}
-
-
-
public void deleteStudent(int id) {
-
System.out.println(
"StudentMysqlImpl.deleteStudent()");
-
}
-
-
public void udpateStudent(int id, String name) { System.out.println(
"StudentMysqlImpl.udpateStudent()");
-
}
-
}
调用以上两个类完成向Oracle 数据库和Mysql 数据存储数据
-
public
class StudentManager {
-
-
public static void main(String[] args) {
-
//对Oracle 数据库的支持
-
/*
-
StudentOracleImpl studentOracleImpl = new StudentOracleImpl();
-
studentOracleImpl.add(1, "张三");
-
studentOracleImpl.del(1);
-
studentOracleImpl.modify(1, "张三");
-
*/
-
-
//需要支持Mysql 数据库
-
StudentMysqlImpl studentMysqlImpl =
new StudentMysqlImpl();
-
studentMysqlImpl.addStudent(
1,
" 张 三 ");
-
studentMysqlImpl.deleteStudent(
1);
-
studentMysqlImpl.udpateStudent(
1,
"张三");
-
}
-
}
以上代码不能灵活的适应需求,当需求发生改变需要改动的代码量太大,这样可能会导致代码的冗余,另外可能会导致项目的失败,为什么会导致这个问题,在开发中没有考虑到程序的扩展性,就是一味的实现,这样做程序是不行的,所以大的项目比较追求程序
扩展性,有了扩展性才可以更好的适应需求。
-
第二种方案,使用接口
UML,统一建模语言
-
public
class Student4OracleImpl implements IStudent {
-
-
public void add(int id, String name) { System.out.println(
"Student4OracleImpl.add()");
-
}
-
-
-
public void del(int id) { System.out.println(
"Student4OracleImpl.del()");
-
}
-
-
public void modify(int id, String name) { System.out.println(
"Student4OracleImpl.modify()");
-
}
-
-
}
-
ublic
class Student4MysqlImpl implements IStudent {
-
-
public void add(int id, String name)
-
{ System.out.println(
"Student4MysqlImpl.add()
-
");
-
}
-
public void del(int id)
-
{ System.out.println(
"Student4MysqlImpl.del()
-
");
-
}
-
-
-
public void modify(int id, String name)
-
{ System.out.println(
"Student4MysqlImpl.modify()");
-
}
-
}
-
public
class StudentService {
-
-
-
public static void main(String[] args) {
-
/*
-
IStudent istudent = new Student4OracleImpl(); IStudent istudent = new Student4MysqlImpl(); istudent.add(1, "张三");
-
istudent.del(1); istudent.modify(1, "张三");
-
*/
-
//IStudent istudent = new Student4OracleImpl();
-
//IStudent istudent = new Student4MysqlImpl();
-
//doCrud(istudent);
-
//doCrud(new Student4OracleImpl());
-
//doCrud(new Student4MysqlImpl());
-
-
-
//doCrud(new Student4OracleImpl()); doCrud(new Student4MysqlImpl());
-
-
}
-
-
//此种写法没有依赖具体的实现
-
//而只依赖的抽象,就像你的手机电池一样:你的手机只依赖电池(电池是一个抽象的事物),
-
//而不依赖某个厂家的电池(某个厂家的电池就是具体的事物了)
-
//因为你依赖了抽象的事物,每个抽象的事物都有不同的实现
-
//这样你就可以利用多态的机制完成动态绑定,进行互换,是程序具有较高的灵活
-
//我们尽量遵循面向接口(抽象)编程,而不要面向实现编程public static void doCrud(IStudent istudent) {
-
istudent.add(
1,
"张三");
-
istudent.del(
1); istudent.modify(
1,
"张三");
-
}
-
-
-
-
//以下写法不具有扩展性
-
//因为它依赖了具体的实现
-
//建议不要采用此种方法,此种方案是面向实现编程,就依赖于具体的东西
-
了
-
/*
-
public static void doCrud(Student4OracleImpl istudent) { istudent.add(1, "张三");
-
istudent.del(1); istudent.modify(1, "张三");
-
}
-
*/
-
-
-
}
以上就是接口的进一步应用相关的知识点了,配套视频教程👇,正在学习Java的同学们一定要持续关注哦~~
Java零基础进阶视频教程
转载:https://blog.csdn.net/bjpowernode_com/article/details/111368070
查看评论