软件设计七大原则 02 依赖倒置原则

依赖倒置原则

高层模块不应该依赖低层模块,二者都应该依赖其抽象;
抽象不应该依赖细节,细节应该依赖抽象;
针对接口编程,不要针对实现编程;
相对于细节的多变性,抽象要稳定的多;
核心就是面向接口编程;

依赖倒置原则示例类图

8195388-1f4d12fcd5b2545c.png
依赖倒置原则.png

依赖倒置原则示例代码

接口
public interface ICourse {
    void studyCourse();
}
实现类
public class FECourse implements ICourse {    
    @Override
    public void studyCourse() {
        System.out.println("Geely在学习FE课程");
    }
}

public class JavaCourse implements ICourse {
    @Override
    public void studyCourse() {
        System.out.println("Geely在学习Java课程");
    }    
}

public class PythonCourse implements ICourse {    
    @Override
    public void studyCourse() {
        System.out.println("Geely在学习Python课程");
    }    
}
上层类
  • 上层类依赖于接口,没有依赖于具体的类;
  • 注入方式是setter注入,也可以是构造器注入;
public class Geely {

    private ICourse iCourse;

    public void setiCourse(ICourse iCourse) {
        this.iCourse = iCourse;
    }

    public void studyImoocCourse(){
        iCourse.studyCourse();
    }

}
客户端
  • Geely和ICourse是耦合的,但和具体的实现类是解耦的;
public class Test {

    //v1
//    public static void main(String[] args) {
//        Geely geely = new Geely();
//        geely.studyJavaCourse();
//        geely.studyFECourse();
//    }

    //v2
//    public static void main(String[] args) {
//        Geely geely = new Geely();
//        geely.studyImoocCourse(new JavaCourse());
//        geely.studyImoocCourse(new FECourse());
//        geely.studyImoocCourse(new PythonCourse());
//    }

    //v3
//    public static void main(String[] args) {
//        Geely geely = new Geely(new JavaCourse());
//        geely.studyImoocCourse();
//    }

    public static void main(String[] args) {
        Geely geely = new Geely();
        geely.setiCourse(new JavaCourse());
        geely.studyImoocCourse();

        geely.setiCourse(new FECourse());
        geely.studyImoocCourse();
    }

}

输出:

Geely在学习Java课程
Geely在学习FE课程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值