接口隔离原则(Interface Segregation Principle,ISP)。ISP定义:

客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。

案例说明

直观认识ISP原则,直接上图:

在图中所描述的应用中,有多个用户需要操作Ops类。现在,我们假设User1类只需要使用op1,User2类只需要使用op2,User3类只需要使用op3。

在这种情况下,如果使用Java语言来实现,User1并不需要调用op2、op3方法,但是在代码层次上且与Ops类形成了依赖。这种依赖意味着我们对Ops类的op2方法所做的任何修改,即使不会影响User1的功能,也会导致Ops需要被重新编译和部署。

这个问题可以通过将不同的操作隔离成接口来解决,如下图:

同样,如果使用Java语言来实现,那么User1类会依赖于U1Ops接口,且U1Ops接口只有op1方法,但是User1类不会依赖Ops类,Ops类只需要负责实现U1Ops接口的方法即可。这样一来,我们之后对Ops类做的修改只要不影响到User1的功能,就不需要重新编译和部署User1了。

ISP于编程语言

我们知道,一个算法、一个设计思路是跟具体的编程语言无关的。上面的例子很大程度上依赖于编程语言的一个特性,那就是导入需要的依赖代码,如Java语言的import,C语言的include等。而正是这些语句带来了代码之间的依赖关系,这也导致了某些模块需要被重新编译和重新部署。

对于Python和Ruby这样的动态语言来说,它们属于解释性语言,它们所依赖的代码会在运行时被推演出来,所以也就不存在重新编译和重新部署的必要性。这也是动态语言比静态语言更灵活、耦合度更松的原因。

当然,如果是这样的话,我们可能会误以为ISP只是一个与特定编程语言相关的设计原则,而非软件架构的设计原则,这就错了。

ISP于软件架构

在一般情况下,任何层次的软件设计如果依赖于不需要的东西,都会是有害的。从代码层次来说,这样的依赖会导致不必要的重新编译和重新部署,从软件架构层次来说,问题也是类似的。

例如,我们在设计系统S(System)时,想要在系统中引入某个框架F(Framework),并假设框架F又绑定在一个特定的数据库D(DB)上,这样就形成了S依赖于F,F依赖于D的关系。如图:

在这种情况下,如果D中包含了F不需要的功能,那么这些功能同样也会是S不需要的。而我们对D中这些功能的修改将会导致F需要被重新部署,后者又会导致S的重新部署。更糟糕的是,D中一个无关功能的错误也可能会导致F和S运行出错。

总结

ISP设计原则告诉我们:任何层次(代码和架构)的软件设计如果依赖了它并不需要的东西,就会带来意料之外的麻烦。

软件架构-接口隔离原则相关推荐

  1. 【软件架构设计原则】单一职责原则和接口隔离原则

    文章目录 软件架构设计原则 单一职责原则 接口隔离原则 其他设计原则 软件架构设计原则 本文通过实例来讲解 单一职责原则 接口隔离原则 单一职责原则 单一职责(Simple Responsibilit ...

  2. 深入浅出设计模式原则之接口隔离原则(ISP)

    下面以学生成绩管理程序为例介绍接口隔离原则的应用(工程源码). 分析:学生成绩管理程序一般包含插入成绩.删除成绩.修改成绩.计算总分.计算均分.打印成绩信息.査询成绩信息等功能,如果将这些功能全部放到 ...

  3. 接口隔离原则最直白描述

    为什么80%的码农都做不了架构师?>>>    最直白描述: 就是要保持接口尽量小,根据不同的需求可插拔各种接口. 接口拆分要基于单一职责原则 也就是优先级:  单一职责原则> ...

  4. [设计模式]设计模式之禅关于接口隔离原则

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

  5. 【设计模式】软件设计七大原则 ( 接口隔离原则 | 代码示例 )

    文章目录 一.接口隔离原则简介 二.接口隔离原则代码示例 ( 反面示例 ) 1.接口定义 ( 接口臃肿 ) 2.实现类 1 3.实现类 2 三.接口隔离原则代码示例 ( 推荐用法 ) 1.接口 1 2 ...

  6. 接口隔离原则_设计模式六大原则

    作者:VieLei 原文:https://blog.csdn.net/s10461/article/details/53941097 在android中我们常提起的设计模式大约有23种,利用好设计模式 ...

  7. 软件设计原则——接口隔离原则

    客户端不应该被迫依赖于它不使用的方法: 一个类对另一个类的依赖应该建立在最小的接口上. [例]安全门案例 我们需要创建一个黑马品牌的安全门,该安全门具有防火.防水.防盗的功能. 可以将防火,防水,防盗 ...

  8. 【设计模式】接口隔离原则

    接口隔离原则 原则概述:客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上 如图中,[对象B]依赖[类D],[对象C]依赖[类E],但[类D]和[类E]都依赖于[接口A]. ...

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

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

最新文章

  1. 推荐几首好听的Coldplay的歌
  2. python os.walk()
  3. apache-2.4.12之虚拟主机配置问题与觖决办法
  4. Shiro中进行角色与权限认证流程
  5. 推荐系统实践-第一章
  6. 【Python】python文件名和文件路径操作
  7. 小爱音箱mini系统故障怎么办_梦龙评机小米小爱音箱HD使用体验
  8. 清华大学信息 计算机科学与技术,清华大学信息科学与技术国家实验室
  9. C语言中可变参函数介绍与示例
  10. MySQL数据库基础教程(一)-简介
  11. 粒子群算法优化BP和Elman神经网络-matlab源码
  12. delphi完美经典--第十八章
  13. matlab abort,matlab自动关闭是怎么回事???
  14. mac制作linux启动盘,Mac 下制作开机启动盘,做了一个Centos7 的系统U盘
  15. 火车采集器V9插件开发手册
  16. 【Linux系列文章】正则表达式与文本处理工具
  17. 【JavaFx 构建ProAdmin UI界面】
  18. 英语语法之句子成分(造句)
  19. ERP的灵魂是管理思想
  20. 推荐一款Mac上好用的Markdown编辑器

热门文章

  1. 一个用于消息队列的并发式php进程管理程序-守护
  2. AudioServicesPlaySystemSound
  3. nodejs服务端基本结构
  4. 求关于运动的英语(收集)
  5. UVa 12169 - Disgruntled Judge(拓展欧几里德)
  6. sessionstorage,localstorage和cookie
  7. Java特性-动态代理
  8. Android ADB 用法
  9. directx11编程中遇到的错误及解决方法
  10. 【报告分享】2022微信视频号生态发展研究报告.pdf(附下载链接)