美文网首页
依赖倒置原则

依赖倒置原则

作者: 简石榴 | 来源:发表于2018-12-05 12:44 被阅读0次

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

High level modules should not depend upon low level modules.Both should depend upon abstractions should not depend upon details.Details should depend upon acstractions.
(高层次的模块不应该依赖低层次的模块,他们都应该依赖抽象。 抽象不应该依赖细节,细节应该依赖抽象。)[OOD Object-Oriented Design]

在Java中的表述为:
1、模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或者抽象类产生的
2、接口或抽象类不依赖于实现类
3、实现类依赖接口或抽象类

算是优点吧
使用依赖倒置原则能够减少类间的耦合性
eg:

public class Driver {
    public void drive(Benz benz)
    {
        benz.run();
    }
}

public class Benz {
    public void run()
    {
        //do something    
    }
}

public class Client {
    public static void main (String[] args)
    {
        Driver zhangsan = new Driver();
        Benz benz = new Benz();
        zhangsan.drive(benz);
    }
}

上面程序表述的问题,如果司机不仅仅开奔驰车,还要开其他类型的车,程序就不合理了。
解决方法 让司机操作一个不区分类型的车 奔驰什么的依赖于这个不区分类型的车。
这也是依赖倒置原则说明的高层模块不依赖于底层模块,都应该依赖于它的抽象

依赖有三种写法:
1、通过构造函数注入
2、Setter依赖注入
3、接口声明依赖对象(接口注入)

最佳实践:
要遵循以下几点规则
1、每个类都有接口或抽象类,或者抽象类和接口两者都具备
2、变量的表面类型尽量是接口或者抽象类
3、任何类都不应该从具体类派生
4、尽量不要覆写基础类的方法
5、结合里氏替换原则(父类出现的地方子类就能出现)使用

依赖倒置原则是实现开闭原则的重要途径,它没有实现对扩展开放对修改关闭。基本就是"面向接口编程"

相关文章

  • 依赖倒置原则

    依赖倒置原则 “依赖倒置原则(Dependence Inversion Principle,DIP)” 定义: 高...

  • 依赖倒置/好莱坞原则/控制反转

    # 请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则? 依赖倒置原则: - 高层模块不应该依赖...

  • 第二周

    请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则? 依赖倒置原则 Dependency Inv...

  • 依赖倒置原则(DIP)

    依赖倒置原则定义 依赖倒置原则(Dependence Inversion Principle ,DIP)定义如下:...

  • 依赖倒置原则

    个人博客原文:依赖倒置原则 设计模式六大原则之三:依赖倒置原则。 简介 姓名 :依赖倒置原则 英文名 :Depen...

  • 架构师训练营第2周命题作业

    一.请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则? 1.依赖倒置原则描述: 1.1. 高...

  • 框架设计[week 2]

    作业一: 1.请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则? 依赖倒置原则: 高层模块不应...

  • 架构师训练营第二周作业

    1. 请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则? 答:依赖倒置原则,英文缩写DIP,全...

  • 架构师训练营第2周作业 面向对象设计原则

    请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则? 依赖倒置原则的标准描述如下: 高层模块不应...

  • 六大设计原则-依赖倒置原则

    依赖倒置原则 Dependency Inversion Principle 简称DIP。 什么是依赖倒置原则 1....

网友评论

      本文标题:依赖倒置原则

      本文链接:https://www.haomeiwen.com/subject/wxqicqtx.html