软件架构-接口隔离原则
接口隔离原则(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设计原则告诉我们:任何层次(代码和架构)的软件设计如果依赖了它并不需要的东西,就会带来意料之外的麻烦。
软件架构-接口隔离原则相关推荐
- 【软件架构设计原则】单一职责原则和接口隔离原则
文章目录 软件架构设计原则 单一职责原则 接口隔离原则 其他设计原则 软件架构设计原则 本文通过实例来讲解 单一职责原则 接口隔离原则 单一职责原则 单一职责(Simple Responsibilit ...
- 深入浅出设计模式原则之接口隔离原则(ISP)
下面以学生成绩管理程序为例介绍接口隔离原则的应用(工程源码). 分析:学生成绩管理程序一般包含插入成绩.删除成绩.修改成绩.计算总分.计算均分.打印成绩信息.査询成绩信息等功能,如果将这些功能全部放到 ...
- 接口隔离原则最直白描述
为什么80%的码农都做不了架构师?>>> 最直白描述: 就是要保持接口尽量小,根据不同的需求可插拔各种接口. 接口拆分要基于单一职责原则 也就是优先级: 单一职责原则> ...
- [设计模式]设计模式之禅关于接口隔离原则
在讲接口隔离原则之前,先明确一下我们的主角--接口.接口分为两种: ● 实例接口(Object Interface),在Java中声明一个类,然后用new关键字产生一个实例,它是对一个类型的事物的描述 ...
- 【设计模式】软件设计七大原则 ( 接口隔离原则 | 代码示例 )
文章目录 一.接口隔离原则简介 二.接口隔离原则代码示例 ( 反面示例 ) 1.接口定义 ( 接口臃肿 ) 2.实现类 1 3.实现类 2 三.接口隔离原则代码示例 ( 推荐用法 ) 1.接口 1 2 ...
- 接口隔离原则_设计模式六大原则
作者:VieLei 原文:https://blog.csdn.net/s10461/article/details/53941097 在android中我们常提起的设计模式大约有23种,利用好设计模式 ...
- 软件设计原则——接口隔离原则
客户端不应该被迫依赖于它不使用的方法: 一个类对另一个类的依赖应该建立在最小的接口上. [例]安全门案例 我们需要创建一个黑马品牌的安全门,该安全门具有防火.防水.防盗的功能. 可以将防火,防水,防盗 ...
- 【设计模式】接口隔离原则
接口隔离原则 原则概述:客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上 如图中,[对象B]依赖[类D],[对象C]依赖[类E],但[类D]和[类E]都依赖于[接口A]. ...
- 深入浅出设计模式_深入浅出设计模式03接口隔离原则
本文作者:开课吧寂然 图文编辑:开三金 大家好~,我是寂然~,本节课呢,我来给大家介绍设计模式原则之接口隔离原则. 话不多说,我们直接进入正题,老规矩,首先带大家了解一下接口隔离原则的官方定义,并作一 ...
最新文章
- 推荐几首好听的Coldplay的歌
- python os.walk()
- apache-2.4.12之虚拟主机配置问题与觖决办法
- Shiro中进行角色与权限认证流程
- 推荐系统实践-第一章
- 【Python】python文件名和文件路径操作
- 小爱音箱mini系统故障怎么办_梦龙评机小米小爱音箱HD使用体验
- 清华大学信息 计算机科学与技术,清华大学信息科学与技术国家实验室
- C语言中可变参函数介绍与示例
- MySQL数据库基础教程(一)-简介
- 粒子群算法优化BP和Elman神经网络-matlab源码
- delphi完美经典--第十八章
- matlab abort,matlab自动关闭是怎么回事???
- mac制作linux启动盘,Mac 下制作开机启动盘,做了一个Centos7 的系统U盘
- 火车采集器V9插件开发手册
- 【Linux系列文章】正则表达式与文本处理工具
- 【JavaFx 构建ProAdmin UI界面】
- 英语语法之句子成分(造句)
- ERP的灵魂是管理思想
- 推荐一款Mac上好用的Markdown编辑器