美文网首页
设计模式之禅(二) -- 依赖倒置原则

设计模式之禅(二) -- 依赖倒置原则

作者: OakesYa | 来源:发表于2021-02-25 00:21 被阅读0次

定义

程序依赖于抽象接口,不依赖于具体实现

两层含义

  • 高层模块不应该依赖底层模块,两者都应该依赖于抽象
    低层模块:不可分割的原子逻辑实现就是低层模块
    高层模块:由原子逻辑实现再组装就是高层模块
    换句话说就是模块间的依赖应该通过接口或者抽象类,而不是具体实现类

  • 抽象不应该依赖细节,细节应该依赖抽象
    抽象:接口或抽象类,不能被直接实例化
    细节:具体实现类,可以直接被实例化
    换句话说就是接口或抽象类不依赖与实现类,实现类依赖接口或抽象类

优劣分析

  • 优点:
    1:依赖倒置可以减少类之间的耦合,提高系统稳定性
public class Driver {
    public void drive(Benz benz) {
        benz.run();
    }
}

public class Benz {
    public void run() {
        System.out.println("奔驰汽车开始运行");
    }
}

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

public class BMW {
    public void run() {
        System.out.println("宝马汽车开始运行");
    }
}

一开始Driver买了一辆奔驰车,然后按照逻辑Driver类就有了奔驰车的驾驶能力,但是zhangsan如果新买了一辆宝马车,按照现实来说用户能开奔驰车的情况下也能开宝马车,而此时问题就在于Driver类并没有提供宝马车,如果Driver类提供的是Car抽象类而不是Benz具体类就可以了。

public interface IDriver {
    //司机就能驾驶汽车
    public void drive(ICar car);
}

public class Driver implements IDriver {
    public void drive(ICar car) {
        car.run();
    }
}

public interface ICar {
    void run();
}

public class Benz implements ICar{
    @Override
    public void run() {
        System.out.println("奔驰汽车开始运行");
    }
}

public class BMW implements ICar {
    @Override
    public void run() {
        System.out.println("宝马汽车开始运行");
    }
}

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

        BMW bmw = new BMW();
        zhangsan.drive(bmw);
    }
}

我们只需要对Driver和Car进行一下抽象就能很好的解决上面的问题,并且zhangsan可以继续买各种车进行驾驶了。

2:两个类之间有依赖关系,只要制定出两者之间的接口就可以独立开发,并且项目之间的单元测试可以独立开发,典型应用就是TDD(测试驱动开发)

  • 缺点:
    1:抽象需要新增接口或者抽象类,并且抽象在代码中需要找到具体实现类看实际执行的逻辑

  • 对比:
    上面我们列举了优点和缺点,在实际工作中我们就会发现依赖倒置原则也更符合面向接口开发,对拓展开放对修改关闭等原则,但这不是绝对的,因为当系统非常简单且不需要后续拓展情况下直接依赖细节就可以了。所以任何工作需要以实际出发考虑。

相关文章

  • 2022-09-21 依赖倒置

    《设计模式之禅》之依赖倒置原则,Dependence Inversion Principle(DIP),核心就是面...

  • 设计模式之禅(二) -- 依赖倒置原则

    定义 程序依赖于抽象接口,不依赖于具体实现 两层含义 高层模块不应该依赖底层模块,两者都应该依赖于抽象低层模块:不...

  • 依赖倒置原则

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

  • 设计模式笔记汇总

    目录 设计原则 “依赖倒置”原则 未完待续... 设计模式 设计模式——策略模式 设计模式——装饰者模式 设计模式...

  • 设计模式原则之依赖倒置原则

    依赖倒置原则的核心思想是面向接口编程 所谓依赖倒置原则(Dependence Inversion Principl...

  • 设计模式 之 依赖倒置原则

    今天看了一下设计模式的依赖倒置原则,觉得这个原则真的是太好了,如果按这个原则去开发的话,以后在维护项目功能的时候,...

  • 设计模式之依赖倒置原则

    相关链接:0. 设计模式之六大原则总结1. 设计模式之单一职责原则2. 设计模式之里式替换原则3. 设计模式之依赖...

  • 设计模式——“依赖倒置”原则

    目录 查看其它设计模式笔记,点这里→设计模式笔记汇总 依赖倒置原则(Dependence Inversion Pr...

  • 设计模式的设计原则

    设计模式的设计原则 面向对象五大设计原则 单一职责原则 里氏替换原则 依赖倒置原则 接口隔离原则 开闭原则 设计模...

  • 软件架构设计原则之依赖倒置原则

    1 依赖倒置原则 依赖倒置原则(Dependence Inversion Principle,DIP)是指设计代码...

网友评论

      本文标题:设计模式之禅(二) -- 依赖倒置原则

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