Java 设计模式(十二) 依赖倒置原则(DIP)

依赖倒置原则(Dependence Inversion Principle)

依赖倒置原则(DIP)的基本概念

原始定义

  • 高层模块不应该依赖低层模块,两者都应该依赖其抽象
  • 抽象不应该依赖细节
  • 细节应该依赖抽象

Java中的具体含义

  • 模块间的依赖通过抽象发生
    • 实现类之间不发生直接的依赖关系
    • 依赖关系通过接口或者抽象类产生
  • 接口或抽象类不依赖于具体实现
  • 实现类依赖接口或抽象类

依赖倒置(DIP)的好处

  • 采用DIP可以减少类之间的耦合性,提高稳定性,降低并行开发带来的风险,提高代码的可读性可维护性
    • 通过抽象(接口或者抽象类)使各个类和模块的实现彼此独立,不互相影响,实现模块之间的松耦合
    • DIP是开闭原则实现的基础

例讲DIP

比如我们有一个场景,学生要用笔写做作业。我们如果直接实现,那么当需求改变,学生要用笔画画的时候,我们就要修改作业类,那么就不符合开闭原则,而且每次拓展都会破坏之前的类,这样是不友好的,那么如何根据DIP来设计这个场景呢?

抽象出接口,并利用抽象接口建立联系
interface Tool{
    public void doWork( Job job );
}

interface people{
    public void use ( Tool tool , Job job );
}

interface Job{
    public void finish();
}

我们抽象出了人,工作,任务三个抽象接口,然后我们利用人使用工具完成工作的场景对三个抽象接口建立关系

分别实现具体的逻辑
class Student1 implements Person{

    @Override
    public void use(Tool tool, Job job) {
        System.out.print("Student use ");
        tool.doWork(job);
    }
}

class Pencil implements Tool{

    @Override
    public void doWork(Job job) {
        System.out.print("Pencile to do ");
        job.finish();
    }
}

class HomeWork implements Job{

    @Override
    public void finish() {
        System.out.println("Homework!!");
    }
}

三个类可以并行实现,完全没有耦合关系,实现程序的模块化和并行开发

那么我们测试一下:
public class DIPTest {

    public static void main ( String [] args ){
        Person student = new Student1();
        Tool pencil = new Pencil();
        Job homeWork = new HomeWork();
        student.use(pencil,homeWork);
    }
}

这里写图片描述
当我们需要实现同样关系的新的类时,只需要拓展就可以了,比如老师用讲义授课依旧可以采取这种模式,可以按照模块进行开发,在团队开发项目的时候效果明显

现实中的经典范例

TDD( Test Driving Developing)测试驱动开发

就是利用一种契约的模式:

  • 先提供接口
  • 然后利用接口的关系和方法写好单元测试类
  • 然后再写实现类,这对提高代码质量有非常大的帮助,特别适合研发类的项目或在项目成员整体水平比较低的情况下采用
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值