代码设计原则(二)--依赖倒置原则

依赖倒置原则(Dependence Inversion Principle,DIP)

  • 高层模块不应该依赖底层模块,二者都应该依赖其抽象;
  • 抽象不应该依赖细节;细节应该依赖抽象;
  • 可以减少类与类之间的耦合性,提高系统的稳定性,提高代码的可读性和可维护性,并能够降低修改程序所

    造成的风险。

代码说明

  • 每次新增课程,在Levi类中新增:

    public class Levi {
      public  void studyJavaClss(){
          System.out.println("Levi在学习java课程!");
      }
    
      public  void studyPythonClss(){
          System.out.println("Levi在学习Python课程!");
      }
    
    }
    
  • 创建ICourse抽象类,Levi进行实现,并传入参数

    public interface ICourse {
    void study();
    }
    
    public class Levi2 {
     public void study(ICourse iCourse){
          iCourse.study();
     }
    }
    
    • main 方法执行

              Levi2 levi2 = new Levi2();
            levi2.study(new JavaClass());
            levi2.study(new PyhonClass());
      
  • 通过构造器进行课程的传递

    public class Levi3 {
      private ICourse iCourse;
    
      public Levi3(ICourse iCourse) {
          this.iCourse = iCourse;
      }
    
      public void study(){
          iCourse.study();
     }
    }
    
    • main

            Levi3 levi3 = new Levi3(new JavaClass());
            levi3.study();
      
  • 通过set方法传递

    public class Levi4 {
      private ICourse iCourse;
    
      public ICourse getiCourse() {
          return iCourse;
      }
    
      public void setiCourse(ICourse iCourse) {
          this.iCourse = iCourse;
      }
    
      public void study(){
          iCourse.study();
      }
    
    }
    
  • 总体Run

    public class Run {
      public static void main(String[] args) {
          //========v1=======
          //想要学习什么课程,在Levi类中加新的课程,维护比较麻烦
          Levi levi = new Levi();
          levi.studyJavaClss();
          levi.studyPythonClss();
          //========v2=======
          //想要学习什么课程,通过new传对象进行学习,不用依赖Levi新加的方法
          Levi2 levi2 = new Levi2();
          levi2.study(new JavaClass());
          levi2.study(new PyhonClass());
    
          //========v3=======
          //想要学习什么课程,通过构造器传递参数进行初始化
          Levi3 levi3 = new Levi3(new JavaClass());
          levi3.study();
    
          //========v4=======
          //通过set初始化
          Levi4 levi4 = new Levi4();
          levi4.setiCourse(new JavaClass());
          levi4.study();
    
      }
    }
    

![]()

声明:该文章系转载,转载该文章的目的在于更广泛的传递信息,并不代表本网站赞同其观点,文章内容仅供参考。

本站是一个个人学习和交流平台,网站上部分文章为网站管理员和网友从相关媒体转载而来,并不用于任何商业目的,内容为作者个人观点, 并不代表本网站赞同其观点和对其真实性负责。

我们已经尽可能的对作者和来源进行了通告,但是可能由于能力有限或疏忽,导致作者和来源有误,亦可能您并不期望您的作品在我们的网站上发布。我们为这些问题向您致歉,如果您在我站上发现此类问题,请及时联系我们,我们将根据您的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。