当前位置: 首页 > news >正文

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

目录

  • 定义
  • 接口隔离原则与单一职责原则
  • 示例

定义

接口隔离原则,全称为 Interface Segregation Principle,缩写ISP。

  • 原始定义:Clients should not be forced to depend upon interfaces that they don’t use。
    翻译: 不应该强行要求客户端依赖它们不用的接口。
  • 另一种定义:The dependency of one class to another one should depend on the smallest possible interface。
    翻译: 类之间的依赖应该建立在最小的接口上面。

总结:
客户端需要什么功能,就提供什么接口,对于客户端不需要的接口不应该强行要求其依赖;类之间的依赖应该建立在最小的接口上面,这里最小的粒度取决于单一职责原则的划分。

接口隔离原则与单一职责原则

从功能上看有相似性,但有区别如下:

  • 从原则约束的侧重点来说,接口隔离原则更关注的是接口依赖程度的隔离,更加关注接口的“高内聚”;而单一职责原则更加注重的是接口职责的划分。

  • 从接口的细化程度来说,单一职责原则对接口的划分更加精细,而接口隔离原则注重的是相同功能的接口的隔离。接口隔离里面的最小接口有时可以是多个单一职责的公共接口。

  • 单一职责原则更加偏向对业务的约束,接口隔离原则更加偏向设计架构的约束。这个应该好理解,职责是根据业务功能来划分的,所以单一原则更加偏向业务;而接口隔离更多是为了“高内聚”,偏向架构的设计。

示例

示例参考 文章 https://blog.csdn.net/u011385940/article/details/124137704

接口隔离原则认为不能强迫用户去依赖那些他们不使用的接口。换句话说,使用多个专门的接口比使用单一的总接口要好。做接口拆分时,也要尽量满足单一职责原则。将外部依赖减到最少,降低模块间的耦合。

比如类A只需要使用方法1、方法3,类B只需要使用方法2、方法4,但在源代码层次上与所有方法形成依赖关系。这种依赖意味着我们对接口I的方法2修改,即使不会影响A所依赖的方法1、方法3的功能,也会导致它需要重新部署和编译。

在这里插入图片描述

改造后,类A不需要用到方法2、方法4,就可以选择不依赖它们。代码更加清晰,接口职责更加明确。

在这里插入图片描述

相关文章:

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

目录 定义接口隔离原则与单一职责原则示例 定义 接口隔离原则,全称为 Interface Segregation Principle,缩写ISP。 原始定义:Clients should not be forced to depend upon interfaces that they don’t use。 翻译: 不应该强行…...

haproxy 负载均衡

haproxy负载均衡 haproxy:基于C语言开发的开源软件 支持高性能的tcp和http负载均衡器,工作中用的版本1.5.9 haproxy功能:主要用于高并发的web站点,工作原理和nginx、lvs都一样 haproxy缺点: 单节点部署,单实例运行。代…...

在el-dialog中使用tinymce 点击工具栏下拉框被遮挡

在el-dialog中使用tinymce控件时,会出现点击工具栏下拉框出现在弹窗下一层,审查元素之后发现是tinymce的下拉框z-index优先级低于el-dialog的z-index导致的,所以需要增加tinymce的下拉框的z-index值。 通过审查元素得到,需要修改t…...

CloudQuery + StarRocks:打造高效、安全的数据库管控新模式

随着技术的迅速发展,各种多元化的数据库产品应运而生,它们不仅类型众多,而且形式各异,国产化数据库千余套,开源数据库百余套 OceanBase 、PolarDB 、StarRocks…还有一些像 Oracle、MySQL 这些传统数据库。这些数据库产…...

各类统计模型R语言的详细使用教程-R语言的线性回归使用教程

各类统计模型R语言的详细使用教程-R语言的线性回归使用教程 前言R语言的线性回归代码示例回归诊断误差项正态qq图内学生化残差外学生化残差线性关系异常值的发现、处理帽子矩阵的方法DFFITS 准则Cook统计量COVRATIO准则多重共线性summaryKlein判别法特征根法条件指数法方差膨胀…...

点云从入门到精通技术详解100篇-基于尺度统一的三维激光点云与高清影像配准

目录 前言 研究现状 三维激光点云与影像配准研究现状 点云配准研究现状...

<蓝桥杯软件赛>零基础备赛20周--第2周

报名明年4月蓝桥杯软件赛的同学们,如果你是大一零基础,目前懵懂中,不知该怎么办,可以看看本博客系列:备赛20周合集 20周的完整安排请点击:20周计划 每周发1个博客,共20周(读者可以按…...

CMake多文件构建初步

前面学习了cmake,不熟悉,只是记录了操作过程;下面再继续; 略有一点进步,增加一个代码文件,之前是1个代码文件; 如下图,prj是空文件夹, CMakeLists.txt如下;…...

游戏研发的解决方案有哪些?

游戏研发的解决方案可以根据不同的需求和情境而有所不同,以下是一些常见的游戏研发解决方案: 游戏引擎: 游戏引擎是游戏研发的基础,它提供了开发游戏所需的核心功能,如图形渲染、物理引擎、音效管理、动画等。一些流行…...

Bayes决策:身高与体重特征进行性别分类

代码与文件请从这里下载:Auorui/Pattern-recognition-programming: 模式识别编程 (github.com) 简述 分别依照身高、体重数据作为特征,在正态分布假设下利用最大似然法估计分布密度参数,建立最小错误率Bayes分类器,写出得到的决…...

【考研数学】数学“背诵”手册 | 需要记忆且容易遗忘的知识点

文章目录 引言一、高数常见泰勒展开 n n n 阶导数公式多元微分函数连续、可微、连续可偏导之间的关系多元函数极值无条件极值条件极值 三角函数的积分性质华里士公式( “点火”公式 )特殊性质 原函数与被积函数的奇偶性结论球坐标变换公式 二、写在最后 …...

HJ3 明明的随机数

牛客网:HJ3 明明的随机数 https://www.nowcoder.com/practice/3245215fffb84b7b81285493eae92ff0?tpId37&tqId21226&ru/exam/oj 使用Go语言解题,最简单的方式: 解题一: // 运行时间:5ms 占用内存&#xff1a…...

如何恢复u盘删除文件?2023最新分享四种方法恢复文件

U盘上删除的文件怎么恢复?使用U盘存储文件是非常方便的,例如:在办公的时候,会使用U盘来存储网络上查找到的资料、产品说明等。在学习的时候,会使用U盘来存储教育机构分享的教学视频、重点知识等。而随着U盘存储文件的概…...

8.稳定性专题

1. anr https://code84.com/303466.html 一句话,规定的时间没有干完要干的事,就会发生anrsystem_anr场景 input 5sservice 前台20s 后台60scontentprivider超市 比较少见 原因 主线程耗时 复杂layout iobinder对端block子线程同步锁blockbinder被占满导…...

基于51单片机的四种波形信号发生器仿真设计(仿真+程序源码+设计说明书+讲解视频)

本设计 基于51单片机信号发生器仿真设计 (仿真程序源码设计说明书讲解视频) 仿真原版本:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0015 这里写目录标题 基于51单片机信号发生…...

不同网段的IP怎么互通

最近在整理工作的时候发现一个不同网段无法互通的问题,就是我们大家熟知的一级路由和二级路由无法互通的问题。由于需要记录整个过程的完整性,这里也需要详细记录下整个过程,明白的人不用看,可以直接跳过,到解决方法去…...

C#序列化与反序列化详解

在我们深入探时C#序列化和反序列化,之前我们先要明白什么是序列化,它又称串行化,是.ET运行时环境用来支持用户定义 类型的流化的机制。序列化就是把一个对象保存到一个文件或数据库字段中去,反序列化就是在适当的时候把这个文件再…...

如何在k8s的Java服务镜像(Linux)中设置中文字体

问题描述:服务是基于springboot的Java服务,在项目上是通过Maven的谷歌插件打包,再由k8s部署的。k8s的镜像就是一个Java服务,Java服务用到了中文字体。 解决这个问题首先需要搞定镜像字体的问题。有很多类似的解决方案,…...

CT 扫描的 3D 图像分类-预测肺炎的存在

介绍 此示例将展示构建 3D 卷积神经网络 (CNN) 所需的步骤,以预测计算机断层扫描 (CT) 扫描中是否存在病毒性肺炎。2D CNN 通常用于处理 RGB 图像(3 通道)。3D CNN 就是 3D 的等价物:它以 3D 体积或一系列 2D 帧(例如 CT 扫描中的切片)作为输入,3D CNN 是学习体积数据表…...

整合管理案例题分析

本文摘自江山老师文档 五个过程 制定项目章程 1.没有写项目章程,没有颁布 2.项目经理自己颁布项目章程 3.项目经理修改项目章程 4.项目章程授权不够,项目经理没有权限,下面的人不听话 5.项目章程的内容不完整 制定项目管理计划 1.项目…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...