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

依赖倒置原则(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();
    
        }
    }
    

posted @ 2020-02-28 22:40  李维维(levi)  阅读(257)  评论(0编辑  收藏  举报