当前位置: 首页 > 后端技术 > Java

设计模式简单来说-依赖倒置原则

时间:2023-04-01 20:45:19 Java

1.依赖倒置原则介绍2.用代码演示依赖倒置原则3.总结1.依赖倒置原则介绍定义:1)高层模块不应该依赖低层级模块,两者都应该依赖于抽象2)抽象不应该依赖于细节,细节应该依赖于抽象3)依赖倒置的中心思想是面向接口编程4)依赖倒置的原则是基于设计概念:相对于细节的可变性,抽象的东西更稳定,建立在抽象基础上的架构要比建立在细节基础上的架构稳定得多。在java中,抽象是指接口或抽象类,细节是指具体的实现类。5)使用接口或抽象类的目的是在不涉及任何具体操作的情况下制定规范,将细节展示的任务留给它们的实现类来完成。问题描述:依赖倒置的原理是最明显的,就是连接数据库的操作,但是当我们要改变数据库的时候,如果代码不是很可维护,可能会导致很多问题在改变数据库。在某个地方重新硬编码,这样的代码架构不是很稳定,因为它们不依赖于抽象,而是依赖于实际的细节。那么我们如何在连接数据库的时候,不依赖具体的实现细节,而是依赖抽象,随时在不同的数据库之间切换呢?解决方法:我们都知道在连接数据库的时候需要导入不同的jar包,mysql导入mysql包,oracle导入oracle包,sqlServer导入sqlServer包。Java只需要定义抽象的连接方法,具体的实现只需要交给厂商实现即可。我们写的服务类只依赖抽象的连接方式,不依赖具体的连接方式。具体实现,那就让厂家自己实现吧,这样数据库驱动包可以随时切换。2、用代码演示依赖倒置原则的需求场景:假设我们要做一个系统,用户可以完成任务,给予积分奖励。因为每个任务都不一样,我们会针对不同的任务写很多的完成逻辑,比如读取任务,点赞任务,浏览任务,每个任务一段代码会使得代码量非常大,不容易修改。publicvoidexecuteTask(StringtaskType){if(taskType=="readingtask"){//执行逻辑}if(taskType=="liketask"){//执行逻辑}}此时,该方法依赖于Implement细节而不是依赖抽象,很容易导致一个方法有几千行,如果多人协作开发,会导致源源不断的冲突。改进:我们将业务执行逻辑抽象出来,每个对应的任务完成逻辑类来实现。publicinterfaceTaskExcute(){publicvoidexecute();}publicclassReadTaskimplementsTaskExcute{publicvoidexcute(){//读取任务执行逻辑}}publicclassLikeTaskimplementsTaskExcute{publicvoidexcute(){//类任务执行逻辑}}这样,高层只需要依赖TaskExcute接口,实现细节由子类实现。依赖倒置原则的目标已经实现。3.小结在使用依赖倒置原则时,尤其是在多人并行开发的时候,有很大的优势。一组开发人员不需要修改一个方法,我们可以同时开始工作而不受影响。依赖倒置的核心原则是面向接口编程,理解面向接口编程,理解依赖倒置。