写点什么

设计模式中的依赖倒置原则和接口隔离原则

用户头像
dongge
关注
发布于: 2020 年 06 月 17 日
设计模式中的依赖倒置原则和接口隔离原则

依赖倒置原则

DIP(Dependency Inversion Principle)- 依赖倒置原则。



High-level modules shouldn’t depend on low-level modules. Both modules should depend on abstractions. In addition, abstractions shouldn’t depend on details. Details depend on abstractions.



梳理一下,可以细分为以下四条:

  1. 高层模块(high-level modules)不要依赖低层模块(low-level)。

  2. 高层模块和低层模块应该通过抽象(abstractions)来互相依赖。

  3. 抽象(abstractions)不要依赖具体实现细节(details)。

  4. 具体实现细节(details)依赖抽象(abstractions)。



Don’t call me,I will call you. 即不要来调用我,我会调用你。由于这句话,依赖倒置原则也叫做好莱坞原则。



举个例子,墙面的开关不应该依赖于电灯的开关实现,而是应该依赖于一个抽象的开关的标准接口。这样,当我们扩展程序的时候,开关同样可以控制其它不同的灯,甚至不同的电器。也就是说,电灯和其它电器继承并实现我们的标准开关接口,而开关厂商就可以不需要关于其要控制什么样的设备,只需要关心那个标准的开关标准。这就是依赖倒置原则。



Tomcat、Jetty、WebSphere Application Server、Weblogic 都是基于这一原则设计出来的。Tomcat、Jetty 这样应用程序不需要调用框架,而是框架调用应用程序。而实现这一特性的前提就是应用程序必须实现框架的接口规范,比如实现 Servlet 接口。应用程序实现 servlet 规范定义的接口。

  1. Tomcat 或者 Jetty 调用应用程序的符合 Servlet 规范的实现。这样应用程序(高层模块)不依赖 Tomcat 或者 Jetty (底层模块)。

  2. Tomcat 或者 Jetty 和 应用程序通过 Servlet 规范实现互相依赖。

  3. Servlet 规范不依赖具体实现细节。

  4. Servlet 的具体实现依赖于 Serverlet 规范。具体实现细节(details)依赖抽象(abstractions)。



WebSphere Application Server、Weblogic 实现了更多的规范,例如 EJB。

  1. WebSphere Application Server、Weblogic 和企业应用程序实现了 EJB 规范。

  2. WebSphere Application Server、Weblogic 和企业应用程通过 EJB 规范实现相互依赖。

  3. EJB 规范不依赖具体实现细节。

  4. enterprise java bean 的具体实现依赖于 EJB 规范。



接口隔离原则

接口隔离原则的英文翻译是“ Interface Segregation Principle”,缩写为 ISP。Robert Martin 在 SOLID 原则中是这样定义它的:“Clients should not be forced to depend upon interfaces that they do not use。”直译成中文的话就是:客户端不应该被强迫依赖它不需要的接口。其中的“客户端”,可以理解为接口的调用者或者使用者。



以上图中的类设计为例,如果 reBulid 需要从 Cache 类中隔离,该如何实现呢?

通过定义 CacheConfig 实现。再通过 UpdateConfig 泛化 extends CacheConfig 类。

这样就实现类接口隔离。



用户头像

dongge

关注

还未添加个人签名 2017.10.19 加入

还未添加个人简介

评论

发布
暂无评论
设计模式中的依赖倒置原则和接口隔离原则