Interface Segregation Principle

  • What 什么是接口隔离原则?
  • Why 为什么要使用接口隔离原则?
  • How 如何使用接口隔离原则?
    • 示例
      • 结论

What 什么是接口隔离原则?

定义:客户端不应该依赖那些它不需要的接口

1.当一个接口太大的时候需要将它分割成一些更小的接口,使用该接口的客户端仅需要知道和它先关的接口
2.每一个接口应该承担一种相对独一的角色,不干不该干的事,该干的事都要干。

接口的两种定义:
1.第一种接口是指该类所持有的的方法的集合,是一种逻辑上的抽象。当想要对该类进行某些操作的时候,需要调用这些方法。

当把接口理解为成一个类型说提供的所有方法特征的集合的时候,这就是一种逻辑上的概念,接口的划分会带来类型的划分,可以把接口理解成角色,一个接口只能代表一个角色,每个角色都有他特定的一个接口。此时这个原则可以叫角色隔离原则。

2.第二种接口是指某种语言具体的“接口”,有严格的定义和结构。如在C#和JAVA语言中的interface。

当把接口理解为特定语言的接口,那么接口隔离原则表达的意思仅仅是提供客户端需要的行为,客户端不需要的行为则需要隐藏起来,所以我们只需要为客户端提供尽可能小的接口,不要提供大的总接口。

Why 为什么要使用接口隔离原则?

在面向对象语言中,实现一个接口需要定义该接口中的所有方法,因此大接口用起来分不方便,增加了无用代码,为了使接口的职责单一,需要将大接口中的方法根据职责不同分别放在不同的小接口中,另一方面,接口应该尽量细化,同时接口中的方法尽可能量小,每一个接口只包含一个客户端(子模块,业务逻辑类)所需要的方法,为不同的客户端定制提供宽窄不同的接口。

How 如何使用接口隔离原则?

示例

某软件公司开发人员针对CRM系统的客户数据显示模块设计了如图所示的ICustomerDataDisplay接口,其中方法readData()用于冲文件读取数据,方法tranformToXML()用于将数据转换成XML格式,方法createChart()用于创建图标,方法displayChart()用于显示图表,方法createReport()用于创建文字报表,方法displayReport()用于显示文字报表。


在实际使用过程中发现该接口很不灵活,例如:如果一个具体的数据显示类无需进行数据转换(源文件就是XML格式的)但是由于实现了该接口,不得不实现其中声明的其他方法,否则程序编译就是出错。

现在需要使用接口隔离原则进行重构。

在ICustomerDataDisplay接口中定义了太多方法,该接口承担了太多的职责,一方面这将会导致,在实现这个接口的具体实现类中,不得不定义接口中的所有方法,灵活性较差,如果出现大量的空方法,这将导致系统出现大量的无用代码,,影响代码质量。另一方面方面对于客户端针对大接口进行编程,这将一定程度上破坏程序的封装性,客户端看到了不该看到的方法。
所以需要将接口按照单一职责和接口隔离原则进行重构,将大接口按照职责划分为小接口,每一个接口只包含一个客户端所需要的方法即可。
如图:

结论

在使用接口隔离原则的时候需要注意控制接口的粒度,接口不能太大,接口不能太小。如果接口太小将会到中系统中接口泛滥。如果接口太大将违背接口隔离原则。所以一般在进行程序设计的时候,在接口中仅包含为某一类客户端定制的方法即可,不应该强迫客户端去依赖那些他们不需要的方法。

深入理解接口隔离原则(Interface Segregation Principle)相关推荐

  1. 软件设计原则(五)接口隔离原则 -Interface Segregation Principle

    在讲接口隔离原则之前,先明确一下我们的主角--接口.接口分为两种: ◇ 实例接口(Object Interface),在Java中声明一个类,然后用new关键字产生的一个实例,它是对一个类型的事物的描 ...

  2. 接口隔离原则(Interface Segregation Principle)

    接口隔离原则指出: CLIENTS SHOULD NOT BE FORCED TO DEPEND UPON INTERFACES THAT THEY DO NOT USE. 首先介绍接口污染. 一个没 ...

  3. 如何理解接口隔离原则?

    接口隔离原则: 客户端不应该依赖它不需要的接口:一个类对另一个类的依赖应该建立在最小的接口上. (图片来自网络) 见上图,该把接口细分到3个接口中去,保证每个类都只实现它需要的接口. 接口隔离原则与单 ...

  4. 深入浅出设计模式_深入浅出设计模式03接口隔离原则

    本文作者:开课吧寂然 图文编辑:开三金 大家好~,我是寂然~,本节课呢,我来给大家介绍设计模式原则之接口隔离原则. 话不多说,我们直接进入正题,老规矩,首先带大家了解一下接口隔离原则的官方定义,并作一 ...

  5. 设计模式:接口隔离原则

    定义 接口隔离原则(Interface Segregation Principle, ISP),定义为: Clients should not be forced to depend upon int ...

  6. java 接口隔离_《Java设计模式及实践》—1.5.4 接口隔离原则

    1.5.4 接口隔离原则 下面这句话从链接https://www.oodesign.com/interface-segregation-principle.html得来: "客户端不应该依赖 ...

  7. 面向对象设计原则之接口隔离原则

    接口隔离原则定义如下: 接口隔离原则(Interface  Segregation Principle, ISP):使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口. 根 ...

  8. 设计模式之禅之接口隔离原则

    声明:本文为阅读秦小波所写的<设计模式之禅>所写小结,文章内容可能有部分引述此书. 接口隔离原则(Interface Segregation Principle):每个模块接口独立 1.定 ...

  9. 六大设计模式原则-接口隔离原则

    一.接口隔离原则定义 接口隔离原则定义如下: 接口隔离原则(Interface Segregation Principle, ISP):使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些 ...

最新文章

  1. 用Android访问本地站点---(localhost,10.0.2.2)要区别
  2. warning: function declaration isn’t a prototype解决方法
  3. 机器学习算法与Python实践之(二)k近邻(KNN)
  4. c语言之 malloc函数详解 在堆中动态分配内存malloc和new的区别
  5. 家居灯光控制系统设计 android,基于Android的室内照明控制系统设计与实现
  6. Oracle入门(十三)之SQL的DML
  7. eclipse占用内存过大_Java性能调优学习(三)-jmap+mat分析内存溢出问题实战
  8. Android 集成高德地图——当前定位,添加图标,画路线,设置显示中心位置,比例,地图刷新位置监听,判断GPS开启,去打开GPS
  9. B端数据表格设计实战指南(建议收藏)
  10. 关闭word_记一次毕设消失事件始末,及mac+word文档消失恢复方法汇总
  11. 【ASP.NET Web API教程】5.2 发送HTML表单数据:URL编码的表单数据
  12. 记一次项目代码重构:使用Spring容器干掉条件判断
  13. Hadoop 高可用集群(HA)
  14. csbte路点机器人_反恐精英csbte地图
  15. 纯数学教程 Page 203 例XLI (2)
  16. 在Outlook 2013中发送给多个收件人时如何隐藏电子邮件地址
  17. fanuc换刀宏程序详解_FANUC宏程序入门到精通,新手必看
  18. 一个疫情期间的实习生经历
  19. android 开发相机焦距解析之调节远近焦距
  20. 计算机考试音乐怎么粘贴,用手机或电脑怎样剪切和接音乐?

热门文章

  1. Mybatis注解开发单表操作
  2. 如何撰写好的科研论文:摘要(1)
  3. 玄武科技招股书失效:首次冲刺港交所上市折戟,毛利率连年下滑
  4. SQL Server通过链接服务器访问Oracle
  5. amazon - business 之 references link market
  6. java我的世界1.6.2_我的世界1.6.2纯净版下载 我的世界1.6.2下载
  7. 记Ubuntu18.04安装后网卡搜不到wifi的问题的解决过程(Device c822驱动问题)
  8. 了解全角和半角,以及全角和半角的相互转换
  9. NoMethodError:undefined method to_ISO8601 for nil:NilClass
  10. 【EdgeX(11)】 :通过研究openvino项目发现一个好东西,CVAT项目数据标注工具,可以使用docker-compose进行本地部署,本地局域网中使用,也非常安全