首页 > 编程知识 正文

什么是依赖倒置原则,软件结构设计的准则

时间:2023-05-04 16:12:14 阅读:162710 作者:4384

倒置原则(Dependence Inversion Principle,DIP )是指在设计代码结构时,上级模块不应该依赖下级模块,两者都应该依赖抽象。 抽象不应该依靠细节,细节应该依靠抽象。 通过依赖倒置,可以减少类与类之间的耦合性,提高系统的稳定性,提高代码的可读性和可维护性,并且降低程序修改带来的风险。 接下来我们来看看案例。 还是以Course (路线)为例。 首先创建类Tom。

public class Tom { publicvoidstudyjavacourse (} (system.out.println ) ) Tom正在学习Java的课程); } public void studyPythonCourse (() system.out.println ) ) Tom正在学习Python的课程); )来调用一下:

publicstaticvoidmain (string [ ] args ) { Tom tom=new Tom ); tom.studyJavaCourse (; Tom.studyPythoncourse () Tom非常喜欢学习,目前正在学习Java和python课程。 大家都知道,学习也让人上瘾。 随着学习兴趣的“暴涨”,Tom至今仍想学习AI (人工智能)课程。 此时,为了业务扩张,从下位层向上位层(调用层)依次修正代码。 在Tom类中添加studyAICourse () )方法,并在上层进行附加调用。 这样,系统发布后,实际上非常不稳定,在修改代码的同时也会带来意想不到的风险。 然后优化代码,创建课程的抽象ICourse界面。

publicinterfaceicourse { void study (; () ) ) ) )。

接下来,创建JavaCourse类。

publicclassjavacourseimplementsicourse { @ overridepublicvoidstudy () system.out.println ) ' Tom正在学习Java课程'。 重新实现PythonCourse类:

publicclasspythoncourseimplementsicourse { @ overridepublicvoidstudy () system.out.println ) ' Tom正在学习python课程'。 更改Tom类:

public class Tom { public void study (icoursecourse ) { course.study; }看看调用代码:

publicstaticvoidmain (string [ ] args ) { Tom tom=new Tom ); Tom.study(newJavacourse ) ); Tom.study(newpythoncourse ) ); }现在看看代码,无论Tom多么感兴趣,对于新课程,只需要新建一个类,通过参与的方式传递给Tom,不需要修改基本的代码。 其实这是大家熟悉的方法,叫做依赖注入。 注入的方式也有构建者方式和Setter方式。 让我们看看如何注入生成器:

公共类Tom { privateicoursecourse; 公共Tom (icoursecourse ) { this.course=course; } public void study () { course.study ); }

查看调用代码:

publicstaticvoidmain (string [ ] args ) TomTom=newTom(newJavacourse ) ); tom.study (; }通过构建器方式注入,在调用时每次都创建实例。 如果Tom是全局单个实例,则只能通过Setter方式注入并继续更改Tom类的代码。

公共类Tom { privateicoursecourse; publicvoidsetcourse (icoursecourse ) { this.course=course; } public void study () { course.study ); }查看调用代码:

publicstaticvoidmain (string [ ] args ) { Tom tom=new Tom ); Tom.setcourse(newJavacourse ) ); tom.study (; Tom.setcourse(newpythoncourse ) ); tom.study (; }请看最终的类图,如下图所示。

因为基于抽象比基于细节构建的体系结构稳定得多,所以在获得需求后,请记住对接口编程,设计从顶层到细节的代码结构。

本文为“Tom弹框架”原创,转载请注明出处。 技术在于共享。 我分享幸福!

如果这篇文章有帮助的话,欢迎您的关注和赞赏; 如果你有什么建议,可以留言或私信。 你的支持是我继续创作的动力。 关注微信公众号“Tom弹架构”,获取更多技术干货!

【推荐】Tom弹架构: 30个设计图案的真实案例,挑战年薪60W不是梦想。 这篇文章从《设计模式就该这样学》年10月29日开始继续连载。 请继续关注……前言design patterns 3360 elementsofreusableobject-oriented software (以下简称《设计模式》 )、Erich Gamma、Richard Helm、ralphjobe 书中这四位作者常被称为“四人帮”,而这本书是“四人帮”,或“. https://blog.csdn.net/gupaoedu _ Tom/article/details/121042616

Tom弹框架:开闭原则(Open-Closed Principle,OCP ) https://blog.csdn.net/gupaoedu _ Tom/article/details/120895316

Tom弹框架:单一责任(Simple Responsibility Pinciple,SRP ) https://blog.csdn.net/gupaoedu _ Tom/article/details/1209069

Tom弹体系结构:接口隔离原则(Interface Segregation Principle,ISP ) https://blog.csdn.net/gupaoedu _ Tom/article/details

Tom弹的框架:迪米特原则(Law of Demeter LoD ) https://blog.csdn.net/gupaoedu _ Tom/article/details/120907187

Tom弹框架:里希特置换原则(Liskov Substitution Principle,LSP ) https://blog.csdn.net/gupaoedu _ Tom/article/details/120999

Tom弹体系结构:合成复用原则(composite/aggregatereuseprinciple,CARP ) https://blog.csdn.net/gupaoedu _ Tom/article/detaile

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。