深入理解设计原则之接口隔离原则(ISP)【软件架构设计】
系列文章目录
C++高性能优化编程系列
深入理解软件架构设计系列
深入理解设计模式系列
高级C++并发线程编程
LSP:接口隔离原则
- 系列文章目录
- 1、接口隔离原则的定义和解读
- 2、案例解读
- 3、如何判断一个接口是否符合接口隔离原则?
- 小结
1、接口隔离原则的定义和解读
Robert Martin在SOLID原则中是这样定义接口隔离原则(Interface Segregation Principle, ISP)的:客户端不应该被强迫依赖它不需要的接口。其中含义的客户端可以被理解为接口的调用者和使用者。
实际上,接口这个词汇可以应用在软件开发的很多场合中。接口既可以看作一组抽象的约定,又可以具体指系统之间相互调用的API,还可以特指面向对象编程语言中的接口等。对于接口隔离原则中的接口。
2、案例解读

在这种情况下,那么很明显,User1虽然不需要调用op2、op3,但在源代码层次上也与它们形成了依赖关系。这种依赖意味着我们对OPS代码中op2所做的任何修改,即使不会影响到User1的功能,也会导致他需要被重新编译和部署。
这个问题可以通过将不同的操作隔离成接口来解决,具体实现如图2所示。
那么现在User1的源代码会依赖U1Ops和op1,但不会依赖于OPS。这样一来,我们之后对OPS做的修改只要不影响到User1的功能,就不需要重新编译和部署。
任何层次的软件设计如果依赖了它并不需要的东西,就会带来意料之外的麻烦。

3、如何判断一个接口是否符合接口隔离原则?
判断一个接口是否符合接口隔离原则可以从以下几个方面考虑:
- 接口的功能是否单一。接口应该只包含必需的方法,不应该包含无用或冗余的方法。
- 接口的职责是否清晰。接口应该只包含与其职责相关的方法,而与其职责无关的方法应该放到其他接口中。
- 接口的依赖是否合理。一个接口不应该依赖于它不需要的方法,它的依赖应该被限制在最小范围内。
- 接口的稳定性是否高。如果一个接口经常发生变化,那么其它使用该接口的类也需要随之改变,这将增加系统的维护成本。
总的来说,接口隔离原则的核心思想是“高内聚、低耦合”,即一个接口应该具有高内聚性,同时与其它接口的耦合应该尽可能地减少。
小结
依赖反转原则和接口隔离原则区别:
依赖反转原则是指高层模块不应该依赖于底层模块,二者都应该依赖于抽象。抽象不应该依赖于具体实现,而具体实现应该依赖于抽象。简单来说,就是要依赖于抽象,而不是具体实现。
接口隔离原则是指一个类对另一个类的依赖应该建立在最小的接口上。这个原则的目的是避免一个类依赖另一个类的不需要的接口,从而减少耦合性,提高灵活性和可维护性。
这两个原则有相似之处,都是通过减少类之间的依赖关系,从而提高软件的复杂性和可维护性。依赖倒置原则关注的是高层模块和底层模块之间的依赖关系,而接口隔离原则则关注的是类与类之间的依赖关系。两个原则相互补充,都是软件设计中非常重要的原则。
相关文章:
深入理解设计原则之接口隔离原则(ISP)【软件架构设计】
系列文章目录 C高性能优化编程系列 深入理解软件架构设计系列 深入理解设计模式系列 高级C并发线程编程 LSP:接口隔离原则 系列文章目录1、接口隔离原则的定义和解读2、案例解读3、如何判断一个接口是否符合接口隔离原则?小结 1、接口隔离原则的定义和…...
IMX6ULL裸机篇之I2C实验主控代码说明二
一. I2C实验 I2C实验内容: 学习如何使用 I.MX6U 的 I2C 接口来驱动 AP3216C,读取 AP3216C 的传感器数据。 I2C读写数据时序图: I2C写数据时序图如下: I2C读数据时序图如下: 二. I2C主控读写时序 1. 读数据与写数…...
【计算机组成原理与体系结构】数据的表示与运算
目录 一、进位计数制 二、信息编码 三、定点数数据表示 四、校验码 五、定点数补码加减运算 六、标志位的生成 七、定点数的移位运算 八、定点数的乘除运算 九、浮点数的表示 十、浮点数的运算 一、进位计数制 整数部分: 二进制、八进制、十六进制 --…...
如何入门编程
随着信息技术的快速发展,编程已经成为一个越来越重要的技能。那么,我们该如何入门编程呢?欢迎大家积极讨论 一、自学编程需要注意什么? 对于我个人的理解,其实自学编程最重要的就是兴趣。你得培养编程兴趣。 所以在学…...
SQL中CONVERT转化日期函数的使用方法
SQL中CONVERT转化日期函数的使用方法 SQL中CONVERT函数最常用的是使用convert转化长日期为短日期,如果只要取yyyy-mm-dd格式时间, 就可以用convert(nvarchar(10),field,120) 120 是格式代码, nvarchar(10) 是指取出前10位字符. 例如 SELECT CONVERT(nvarchar(10),…...
SpringBoot2-核心技术(一)
SpringBoot2-核心技术(一) 了解SpringBoot配置文件的使用 文章目录 SpringBoot2-核心技术(一)了解SpringBoot配置文件的使用一、文件类型1. properties2. yaml 二、yaml的基本使用1. 基本语法2. 数据类型2.1 字面量 2.2 对象2.3 …...
mac host学习
参考: SSH中known_hosts文件作用和常见问题及解决方法 https://blog.csdn.net/luduoyuan/article/details/130070120在 Mac 上更改 DNS 设置 https://support.apple.com/zh-cn/guide/mac-help/mh14127/mac mac中有时候你输入的域名,但会跳转到与期望ip不…...
Java之~指定String日期时间,5分钟一截取时间
// 截取5分钟时间Testpublic void timeCutForDay() throws ParseException {String startTime "2023-03-28 09:16:03";String endTime "2023-03-31 23:59:59";SimpleDateFormat dateFormat new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");D…...
【chatGPT4结对编程】chatGPT4教我做图像分类
开始接触深度学习 大语言模型火了之后,我也想过是否要加入深度学习的行业当中来,一开始的想法就是AI大模型肯定会被各大厂垄断,我们作为普通应用型软件工程师直接调用api就完事,另外对自己的学历也自卑(刚刚够线的二本࿰…...
Different romantic
001 他暗恋上我们班上的一个女生。 He has a crush on a girl in our class. crush n. 迷恋 have a crush on (someone) 暗恋(某人) crush 也可以指“暗恋的对象”。例如,“他在大学曾经暗恋过两个人”,英语就是He had two crushe…...
learn C++ NO.7——C/C++内存管理
引言 现在是5月30日的正午,图书馆里空空的,也许是大家都在午休,也许是现在37摄氏度的气温。穿着球衣的我已经汗流浃背,今天热火战胜了凯尔特人,闯入决赛。以下克上的勇气也激励着我,在省内垫底的大学中&am…...
SDUT数据库原理——第十章作业(参考答案)
1. 简述使用检查点方法进行数据恢复的一般步骤。 答: (1)使用检查点方法进行数据恢复,首先从重新开始文件(见P302页图10.3)中找到最后一个检查点记录在日志文件中的地址,由该地址在日志文件中找到最后一个检查点记录。 (2)由该检查点记录得到检查点建立时刻所有正在…...
My Note of Diffusion Models
Diffusion Models Links: https://theaisummer.com/diffusion-models/ Markovian Hierachical VAE rvs: data: x 0 x_{0} x0,representation: x T x_{T} xT ( p ( x 0 , x 1 , ⋯ , x T ) , q ( x 1 , ⋯ , x T ∣ x 0 ) ) (p(x_0,x_1,\cdots,x_T),q(x_1,\cdots,x_{T…...
【P37】JMeter 仅一次控制器(Once Only Controller)
文章目录 一、仅一次控制器(Once Only Controller)参数说明二、测试计划设计2.1、测试计划一2.1、测试计划二 一、仅一次控制器(Once Only Controller)参数说明 可以让控制器内部的逻辑只执行一次;单次的范围是针对某…...
cleanmymac要不要下载装机?好不好用
当我们收到一台崭新的mac电脑,第一步肯定是找到一款帮助我们管理电脑运行的“电脑管家”,监控内存运行、智能清理系统垃圾、清理Mac大文件旧文件、消除恶意软件、快速卸载更新软件、隐私保护、监控系统运行状况等。基本在上mac电脑防护一款CleanMyMac就够…...
DNS风险分析及防护研究(五):常见的DNS威胁与防御(中科三方)
DNS是互联网运行重要的基础设施,在全球互联网运转中扮演重要作用。互联网中的每一次访问都开始于一次DNS查询,从而将人们更好辨识的域名转换为数字化的IP地址。随着互联网的快速发展以及网络技术的快速发展,DNS固有的缺陷逐步暴露出来&#x…...
使用geoserver发布shp和tiff数据
一、安装并启动geoserver服务 1.1 下载geoserver 进入官网下载 由于geoserver是使用Java语言开发的,所以运行需要java的环境,不同geoserver的版本号对java的版本要求不同,所以选择版本时需注意对应java的版本要求,由于我本地安…...
谷歌周彦祺:LLM浪潮中的女性科学家多面手丨智源大会嘉宾风采
导读 大模型研发竞赛如火如荼,谷歌紧随OpenAI其后推出PalM2、Gemini等系列模型。Scaling Law是否仍然适用于当下的大模型发展?科技巨头与初创企业在竞争中各有哪些优势和劣势?模型研究者应秉持哪些社会责任? 2023智源大会「基础模…...
Burp模块
Target模块 记录流量 1.Target按主机或域名分类记录 2.HTTP History 按时间顺序记录且会记录很多次 3.Target模块的作用 (1)把握网站的整体情况 (2)对一次工作的域进行分析 (3)分析网站存在的攻击面 …...
sql笔记:SQL SERVER字符串填充(标量值函数创建、标量值函数调用)
/*字符串填充 ,如果返回 -1 说明输入参数有错误*/ CREATE FUNCTION [dbo].[uf_pad_string] ( @string_unpadded VARCHAR(100), --123填充前字符串 @pad_char VARCHAR(1), --0 填充的字符串 @pad_count tinyint, --10 填充后字符串长度 @pad_p…...
告别MCUXpresso IDE:手把手教你用VSCode + CMake + Ninja搭建NXP MCU开发环境(附SDK离线配置避坑指南)
告别MCUXpresso IDE:手把手教你用VSCode CMake Ninja搭建NXP MCU开发环境(附SDK离线配置避坑指南) 嵌入式开发者常年在资源受限的环境中工作,却不得不忍受传统IDE的资源挥霍。当MCUXpresso IDE占用2GB内存只为编辑一个头文件时&…...
星光不负赶路人——写给即将高考的每一位同学
在高考即将结束的时刻。在你放下了笔,走出了考场,站在了成年人世界的门槛上的时刻。送给你们一段话和几个思考。这几天,你大概会反复听到一句话:“星光不负赶路人。”大家用它来祝福你,赞美你过去三年的努力。但今天&a…...
【产品发布】建享云智能单据扫描仪正式上线,一站式解决单据数字化处理难题
建享云正式推出全新智能单据扫描仪,聚焦各行业单据数字化处理的核心痛点,无需复杂部署流程、无需专业技术支撑,轻松适配个人办公与企业级各类场景。本文将简洁明了地介绍产品核心功能、操作方法及适配范围,帮助用户快速了解产品价…...
AI Daily Paper Reader(ADPR):零服务器搭建个人/团队通用大模型API驱动的论文阅读与推荐平台
一、背景 AI领域论文每日增长数量惊人,arXiv 上仅计算机科学相关的新论文每天就有上百篇。对于科研人员、研究生或AI从业者来说,如何高效筛选、阅读并跟踪与自己研究方向相关的论文,已成为日常工作中最耗时的一环。 传统的解决方案…...
华为OD机试真题 新系统 2026-05-20 JavaGoC语言 实现【多模型版本的最优调度】
目录 题目 思路 Code 题目 在大语言模型推理服务中,有多个不同大小的模型版本可供选择。每个模型版本有不同的准确率和推理延迟。给定查询次数 N 和总时间预算 T,为每个查询选择一个模型版本,使得在不超过时间预算的前提下,总准…...
Kolmogorov-Arnold网络:函数表示论驱动的可解释神经架构
1. 这不是又一个“万能网络”——Kolmogorov-Arnold 网络到底在解决什么真问题?你可能刚在某篇预印本论文里看到“Kolmogorov-Arnold Network”这个名词,心里一咯噔:又来?又是那种名字听着像数学史课件、实操起来连 loss 曲线都跑…...
OpenSSH CVE-2024-6387 漏洞原理与实战修复指南
1. 这不是普通补丁:CVE-2024-6387 是 OpenSSH 里埋了二十年的“定时炸弹”你有没有遇到过这种情况:凌晨三点,监控告警疯狂闪烁,SSH 登录失败率突然飙升到98%,但服务器负载、内存、磁盘一切正常;运维同事反复…...
LRCGET:告别手动搜索,实现本地音乐歌词批量下载的完整指南
LRCGET:告别手动搜索,实现本地音乐歌词批量下载的完整指南 【免费下载链接】lrcget Utility for mass-downloading LRC synced lyrics for your offline music library. 项目地址: https://gitcode.com/gh_mirrors/lr/lrcget 你是否拥有大量本地音…...
N_m3u8DL-CLI-SimpleG:高效M3U8视频下载的性能优化实战指南
N_m3u8DL-CLI-SimpleG:高效M3U8视频下载的性能优化实战指南 【免费下载链接】N_m3u8DL-CLI-SimpleG N_m3u8DL-CLIs simple GUI 项目地址: https://gitcode.com/gh_mirrors/nm3/N_m3u8DL-CLI-SimpleG 在流媒体内容日益丰富的今天,M3U8视频下载已成…...
基于AI流动性监测模型的黄金波动分析:油价跳水与美元回落下的黄金震荡企稳机制解析
摘要:本文通过AI宏观情绪识别模型、美元流动性监测框架以及能源价格传导算法,结合近期原油、美元与美债收益率变化,分析黄金在高波动市场环境下的价格修复逻辑,并探讨避险需求、通胀预期与美联储政策路径之间的动态博弈关系。一、…...
