软件设计七大原则:(二)依赖倒置原则

电玩女神 2023-10-06 10:33 196阅读 0赞

一、依赖倒置原则简介

  • 定义:高层模块不应该依赖底层模块,二者都应该依赖其抽象
  • 抽象不应该依赖细节,细节应该依赖抽象
  • 针对接口编程,不要针对实现编程

二、代码实现

  1. public class Evan {
  2. private Course course;
  3. public void setCourse(Course course) {
  4. this.course = course;
  5. }
  6. public void studyCourse(){
  7. course.studyCourse();
  8. }
  9. }
  10. public interface Course {
  11. void studyCourse();
  12. }
  13. public class JavaCourse implements Course{
  14. @Override
  15. public void studyCourse() {
  16. System.out.println("Evan 在学习Java课程");
  17. }
  18. }
  19. public class FeCourse implements Course{
  20. @Override
  21. public void studyCourse() {
  22. System.out.println("Evan 在学习前端课程");
  23. }
  24. }
  25. public class PythonCourse implements Course {
  26. @Override
  27. public void studyCourse() {
  28. System.out.println("Evan在学习Python课程");
  29. }
  30. }
  31. public class DependencyInversionTest {
  32. //v4 通过 setter传入接口
  33. public static void main(String[] args) {
  34. Evan evan = new Evan();
  35. evan.setCourse(new JavaCourse());
  36. evan.studyCourse();
  37. evan.setCourse(new FeCourse());
  38. evan.studyCourse();
  39. evan.setCourse(new PythonCourse());
  40. evan.studyCourse();
  41. }
  42. }

三、关于依赖倒置原则的理解

  1. /**
  2. * 关于"依赖倒置原则"的理解
  3. * 通过将Course接口 进行多种实现,然后让Evan的studyCourse中传入具体接口,
  4. * 从而进一步达到不动Evan这个类即可使用不同实现的目的。
  5. * 这样做实现了接口的高内聚,Course、Evan、DependencyInversionTest的低耦合。
  6. * 将功能的具体实现选择放到 高层次的模块(细节实现所在模块)中,
  7. * 这样做能够减少低层次的底层基类结构的修改,减少系统改动的同时方便扩展。
  8. * 假如说我们还需要学习Rust课程,那我们直接可以选择创建一个Course的实现类RustCourse,然后实现StudyCourse()方法,
  9. * 最后在主测试类中,evan.studyCourse(new RustCourse());即可完成业务处理。
  10. * 总之,面向接口编程,高层次的模块不应该依赖于低层次的模块。
  11. * 相对于细节的多变性,抽象的东西要稳定得多,底层模块去指定规则、规范、框架、大体流程。
  12. */

发表评论

表情:
评论列表 (有 0 条评论,196人围观)

还没有评论,来说两句吧...

相关阅读