设计原则 - 依赖倒置原则

概念

  • 依赖倒置原则的定义:Dependency Inversion Principle,DIP,高层模块不应该依赖低层模块,二者都应该依赖其抽象。
  • 依赖倒置原则的中心思想:抽象不应该依赖细节;细节应该依赖抽象。
  • 依赖倒置原则的核心思想:针对接口编程,不要针对实现编程。
  • 依赖倒置原则的优点:可以减少类间的耦合性、提高系统稳定性,提高代码可读性和可维护性,可降低修改程序所造成的风险。
  • 如果说开闭原则是面向对象设计的目标,依赖倒置原则就是面向对象设计的主要实现机制之一,它是系统抽象化的具体体现。
  • 开闭原则是目标,里氏替换原则是基础,依赖倒置原则是手段,它们相互补充,相辅相成。

实例

代码实例

  • Coisini.java
/**
 * @Description 课程学习
 * @date Dec 3, 12
 * @version 1.0
 */
public class Coisini {

    public void studyJavaCourse() {
        System.out.println("在学习Java课程");
    }

    public void studyPythonCourse() {
        System.out.println("在学习Python课程");
    }

}
  • Test.java
/**
 * @Description 测试类
 * @date Dec 3, 12
 * @version 1.0
 */
public class Test {
    public static void main(String[] args) {
        // 高层模块依赖低层模块,Test的修改是依赖于Coisini实现的
        Coisini coisini = new Coisini();
        coisini.studyJavaCourse();
        coisini.studyPythonCourse();
    }
}
  • 输出结果
在学习Java课程
在学习Python课程

开闭原则的实现

  • ICourse.java
/**
 * @Description 课程接口
 * @date Dec 3, 2021
 * @version 1.0
 */
public interface ICourse {

    /**
     * 学习课程
     */
    void studyCourse();

}
  • JavaCourse.java
/**
 * @Description Java课程
 * @date Dec 3, 2021
 * @version 1.0
 */
public class JavaCourse implements ICourse{
    @Override
    public void studyCourse() {
        System.out.println("在学习Java课程");
    }
}
  • PythonCourse.java
/**
 * @Description Python课程 
 * @author coisini
 * @date Dec 3, 2021
 * @version 1.0
 */
public class PythonCourse implements ICourse{
    @Override
    public void studyCourse() {
        System.out.println("在学习Python课程");
    }
}
  • Coisini.java
public class Coisini {

    /**
     * 学习课程
     * @param iCourse
     */
    public void studyImoocCourse(ICourse iCourse) {
        iCourse.studyCourse();
    }

}
  • Test.java
/**
 * @Description 依赖倒置原则测试类
 * @date Dec 3, 12
 * @version 1.0
 */
public class Test {

    public static void main(String[] args) {
        // 面向接口编程
        Coisini coisini = new Coisini();
        coisini.studyImoocCourse(new JavaCourse());
        coisini.studyImoocCourse(new PythonCourse());
    }

}
  • 输出结果
在学习Java课程
在学习Python课程
  • 类图变化如下

在这里插入图片描述
在这里插入图片描述

  • 依赖倒置原则的实现总结:程序要依赖于抽象接口,不要依赖于具体的实现,主要目的是降低耦合;以抽象为基础搭建起来的架构比以细节为基础搭建的架构更稳定

源码

GitHubhttps://github.com/Maggieq8324/design_pattern.git


- End -
- 个人学习笔记 -
- 仅供参考 -

posted @ 2021-12-06 07:02  Maggieq8324  阅读(159)  评论(0编辑  收藏  举报