六大设计原则(三)DIP依赖倒置原则

依赖倒置原则(DIP)强调高层模块和低层模块应依赖于抽象,而非具体实现。文章通过举例司机驾驶汽车的情景,展示了传统做法的缺点,即耦合度过高。然后,通过接口注入法、构造函数传递依赖对象和setter方法传递依赖对象三种方式,解释了如何使用DIP降低耦合,提高代码的可维护性和可读性。DIP的核心是面向接口编程,有助于实现模块间的独立开发和设计的灵活性。
摘要由CSDN通过智能技术生成

原文:六大设计原则(三)DIP依赖倒置原则
依赖倒置原则DIP(Dependence Inversion Principle)

依赖倒置原则的含义

  • 高层模块不能依赖低层模块,二者都应该依赖其抽象。
  • 抽象不应该依赖于细节。
  • 细节应该依赖抽象。

什么是高层模块?低层模块
每一个原子逻辑就是低层模块,原子逻辑再组就是高层模块。
什么是抽象和细节
抽象是抽象类,不可被实例化。
细节是实现类,比如实现的接口或继承抽象类的子类,可以被实例化。

表现在Java语言中就是面向接口编程

  • 模块间的依赖是通过抽象来实现的,具体的实现类之间不能发生直接的依赖。
  • 接口或抽象类不能依赖与实现类。
  • 实现类依赖接口或抽象类。

我们假设有三个类,一个为场景类,一个为司机类,一个为奔驰类。通过这三个类我们便可以实现司机开动汽车这个场景。如图
司机驾驶奔驰车类图
具体的实现代码如下
司机类

package des.DIP;
//司机类
public class Driver {
   
    //司机驾驶车 紧耦合
    public void drive(Benze benze){
   
        benze.run();
    }
    //司机驾驶宝马车 紧耦合
    public void drive(BMW bmw){
   
        bmw.run();
    }
}

奔驰类

package des.DIP;
//奔驰车
public class Benze {
   
    public void run(){
   
        System.out.print("奔驰车开始运行...");
    }
}

场景类

package des.DIP;
//场景类
public class Client {
   
    public static void main(String[] args){
   
        //创建一个司机
        Driver zs = new Driver();
        //创建一个奔驰车
        Benze benze = new Benze()
六大设计原则是指面向对象设计中的六个重要原则,它们是: 1. 单一职责原则(Single Responsibility Principle,SRP):一个类应该只有一个引起它变化的原因,即一个类应该只有一个职责。 2. 开放封闭原则(Open-Closed Principle,OCP):软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。即在不修改已有代码的情况下,通过扩展来实现新的功能。 3. 里氏替换原则(Liskov Substitution Principle,LSP):子类型必须能够替换掉它们的父类型。即在使用基类对象的地方,可以用其子类对象来替代,而不会影响程序的正确性。 4. 接口隔离原则(Interface Segregation Principle,ISP):客户端不应该依赖它不需要的接口。即一个类对另一个类的依赖应该建立在最小的接口上。 5. 依赖倒置原则(Dependency Inversion Principle,DIP):高层模块不应该依赖低层模块,二者都应该依赖于抽象。即要针对接口编程,而不是针对实现编程。 6. 迪米特法则(Law of Demeter,LoD):一个对象应该对其他对象有尽可能少的了解,即一个对象应该只与其直接的朋友通信,而不与陌生的对象通信。 依赖倒置原则六大设计原则中的一项,它强调高层模块不应该依赖低层模块,二者都应该依赖于抽象。具体来说,依赖倒置原则要求: 1. 高层模块不应该直接依赖于低层模块的具体实现,而应该依赖于抽象接口。 2. 抽象接口应该由高层模块定义,低层模块去实现。 3. 通过依赖倒置,可以降低模块间的耦合度,提高代码的可维护性和可扩展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值