飞道的博客

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

491人阅读  评论(0)

本篇文章讲解的知识点主要围绕面向对象中的接口(行为),废话不多说,只分享Java相关的干货!

java 中接口其实描述了类需要做的事情,类要遵循接口的定义来做事,使用接口到底有什
么本质的好处?可以归纳为两点:
  • 采用接口明确的声明了它所能提供的服务
  • 解决了 Java 单继承的问题
  • 实现了可接插性(重要)
示例:完成学生信息的增删改操作,系统要求适用于多个数据库,如:适用于 Oracle MySQL
  • 第一种方案,不使用接口,每个数据库实现一个类:

    
  1. //Oracle 的实现
  2. public class StudentOracleImpl {
  3. public void add(int id, String name) { System.out.println( "StudentOracleImpl.add()");
  4. }
  5. public void del(int id) { System.out.println( "StudentOracleImpl.del()");
  6. }
  7. public void modify(int id, String name) { System.out.println( "StudentOracleImpl.modify()");

需求发生变化了,客户需要将数据移植Mysql 上


    
  1. Mysql 的实现
  2. public class StudentMysqlImpl {
  3. public void addStudent(int id, String name) { System.out.println( "StudentMysqlImpl.addStudent()");
  4. }
  5. public void deleteStudent(int id) {
  6. System.out.println( "StudentMysqlImpl.deleteStudent()");
  7. }
  8. public void udpateStudent(int id, String name) { System.out.println( "StudentMysqlImpl.udpateStudent()");
  9. }
  10. }

调用以上两个类完成向Oracle 数据库和Mysql 数据存储数据


    
  1. public class StudentManager {
  2. public static void main(String[] args) {
  3. //对Oracle 数据库的支持
  4. /*
  5. StudentOracleImpl studentOracleImpl = new StudentOracleImpl();
  6. studentOracleImpl.add(1, "张三");
  7. studentOracleImpl.del(1);
  8. studentOracleImpl.modify(1, "张三");
  9. */
  10. //需要支持Mysql 数据库
  11. StudentMysqlImpl studentMysqlImpl = new StudentMysqlImpl();
  12. studentMysqlImpl.addStudent( 1, " 张 三 ");
  13. studentMysqlImpl.deleteStudent( 1);
  14. studentMysqlImpl.udpateStudent( 1, "张三");
  15. }
  16. }
以上代码不能灵活的适应需求,当需求发生改变需要改动的代码量太大,这样可能会导致代码的冗余,另外可能会导致项目的失败,为什么会导致这个问题,在开发中没有考虑到程序的扩展性,就是一味的实现,这样做程序是不行的,所以大的项目比较追求程序 扩展性,有了扩展性才可以更好的适应需求。
  • 第二种方案,使用接口

UML,统一建模语言


     
  1. public class Student4OracleImpl implements IStudent {
  2. public void add(int id, String name) { System.out.println( "Student4OracleImpl.add()");
  3. }
  4. public void del(int id) { System.out.println( "Student4OracleImpl.del()");
  5. }
  6. public void modify(int id, String name) { System.out.println( "Student4OracleImpl.modify()");
  7. }
  8. }

     
  1. ublic class Student4MysqlImpl implements IStudent {
  2. public void add(int id, String name)
  3. { System.out.println( "Student4MysqlImpl.add()
  4. ");
  5. }
  6. public void del(int id)
  7. { System.out.println( "Student4MysqlImpl.del()
  8. ");
  9. }
  10. public void modify(int id, String name)
  11. { System.out.println( "Student4MysqlImpl.modify()");
  12. }
  13. }

    
  1. public class StudentService {
  2. public static void main(String[] args) {
  3. /*
  4. IStudent istudent = new Student4OracleImpl(); IStudent istudent = new Student4MysqlImpl(); istudent.add(1, "张三");
  5. istudent.del(1); istudent.modify(1, "张三");
  6. */
  7. //IStudent istudent = new Student4OracleImpl();
  8. //IStudent istudent = new Student4MysqlImpl();
  9. //doCrud(istudent);
  10. //doCrud(new Student4OracleImpl());
  11. //doCrud(new Student4MysqlImpl());
  12. //doCrud(new Student4OracleImpl()); doCrud(new Student4MysqlImpl());
  13. }
  14. //此种写法没有依赖具体的实现
  15. //而只依赖的抽象,就像你的手机电池一样:你的手机只依赖电池(电池是一个抽象的事物),
  16. //而不依赖某个厂家的电池(某个厂家的电池就是具体的事物了)
  17. //因为你依赖了抽象的事物,每个抽象的事物都有不同的实现
  18. //这样你就可以利用多态的机制完成动态绑定,进行互换,是程序具有较高的灵活
  19. //我们尽量遵循面向接口(抽象)编程,而不要面向实现编程public static void doCrud(IStudent istudent) {
  20. istudent.add( 1, "张三");
  21. istudent.del( 1); istudent.modify( 1, "张三");
  22. }
  23. //以下写法不具有扩展性
  24. //因为它依赖了具体的实现
  25. //建议不要采用此种方法,此种方案是面向实现编程,就依赖于具体的东西
  26. /*
  27. public static void doCrud(Student4OracleImpl istudent) { istudent.add(1, "张三");
  28. istudent.del(1); istudent.modify(1, "张三");
  29. }
  30. */
  31. }

以上就是接口的进一步应用相关的知识点了,配套视频教程👇,正在学习Java的同学们一定要持续关注哦~~

Java零基础进阶视频教程

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


转载:https://blog.csdn.net/bjpowernode_com/article/details/111368070
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场