Java设计模式-七大架构设计原则-依赖倒置原则

本文介绍了Java设计模式中的依赖倒置原则,解释了该原则的含义和好处,包括降低耦合性和提高系统稳定性。通过一个关于学生Tom学习不同课程的例子,展示了如何实际应用依赖倒置原则,以减少代码修改的风险。在实践部分,讨论了如何创建抽象接口和具体课程类,并通过构造器实现依赖注入,使得在添加新课程时无需修改原有代码。

Java设计模式-七大架构设计原则-依赖倒置原则

从这一专栏开始将学习设计模式,上课学习和自己总结归纳的笔记将总结出来供大家参考。
参考书籍:《设计模式就该这样学》

其他文章:

Java设计模式-UML类图Java设计模式-七大架构设计原则-开闭原则
Java设计模式-七大架构设计原则-依赖倒置原则Java设计模式-七大架构设计原则-单一职责原则
Java设计模式-七大架构设计原则-接口隔离原则Java设计模式-七大架构设计原则-最少知道原则(迪米特法则)
Java设计模式-七大架构设计原则-里氏替换原则和合成复用原则Java设计模式-创建型设计模式-简单工厂模式
Java设计模式-创建型设计模式-工厂方法模式(工厂模式)Java设计模式-创建型设计模式-抽象工厂模式
Java设计模式-创建型设计模式-建造者模式Java设计模式-创建型设计模式-原型模式
Java设计模式-创建型设计模式-单例模式Java设计模式-结构型设计模式-适配器模式
Java设计模式- 结构型设计模式-享元模式Java设计模式- 结构型设计模式-外观模式
Java设计模式- 结构型设计模式-桥接模式Java设计模式-结构型模式设计模式-组合模式
Java设计模式-行为型设计模式-观察者模式

依赖倒置原则

依赖倒置原则(Dependence Inversion Principle DIP):高层模块不应该依赖底层模块,二者都应该依赖其抽象。抽象不应该依赖细节,细节应该依赖抽象。

好处:降低类与类之间的耦合性,提高系统稳定性,提高代码的可读性和可维护性,并降低修改程序带来的风险

1.1依赖倒置原则的实际应用

现在有一个学生叫做Tom,他学习了Java和Python两门课

public class Tom {
    public void studyJava(){
        System.out.println("Tom学习Java");
    }
    public void studyPython(){
        System.out.println("Tom学习Python");
    }
}

有一天Tom又报名了JavaScript等课程,如果要在Tom类里面加studyJavaScript等方法后,首先会在Tom类里面过于臃肿,而且在调用的测试类中(高层调用类)也要修改代码,所以会非常不稳定,如果要增加的话按如下方法进行增加

首先创建一个课程的抽象接口ICourse

public interface ICourse {
    void study();
}

然后创建一个JavaCourse类和PythonCourse类并且新建一个JavaScriptCourse类

public class JavaCourse implements ICourse{
    @Override
    public void study() {
        System.out.println("Tom学习Java");
    }
}

public class PythonCourse implements ICourse{
     @Override
    public void study() {
        System.out.println("Tom学习Python");
    }
}

public class JavaScriptCourse implements ICourse {
     @Override
    public void study() {
        System.out.println("Tom学习JavaScript");
    }
}

最后修改Tom类,在这里就是依赖注入,通过构造器的方式依赖注入。

public class Tom {
    private ICourse course;

    public Tom(ICourse course) {
        this.course = course;
    }

    public void studyCourse(){
        course.study();
    }
}

1.2测试类及其结果

public class DipTest {
    public static void main(String[] args) {
        Tom tom1=  new Tom(new JavaCourse());
        tom1.studyCourse();

        Tom tom2=  new Tom(new PythonCourse());
        tom2.studyCourse();

        Tom tom3=  new Tom(new JavaScriptCourse());
        tom3.studyCourse();

    }
}

在这里插入图片描述

1.3总结

从修改后的代码可以看出,无论Tom再加多少课,每加一门课只需要加一个类。通过传递参数的方式告诉Tom,而不需要修改底层代码。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值