Java零基础进阶篇之面向对象-接口的进一步应用

本篇文章讲解的知识点主要围绕面向对象中的接口(行为),废话不多说,只分享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,统一建模语言

Java零基础进阶篇之面向对象-接口的进一步应用_第1张图片

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零基础进阶视频教程

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(纯干货,Java学习资料,Java学习视频教程,java,编程语言,数据库,人工智能,设计模式)