设计原则之【接口隔离原则】

news2024/10/7 14:24:51

文章目录

  • 一、什么是接口隔离原则
  • 二、实例
  • 三、总结
    • 接口隔离原则与单一职责原则的区别

一、什么是接口隔离原则

接口隔离原则(Interface Segregation Principle, ISP)是指用多个专门的接口,而不使用单一的总接口,客户端不应该依赖它不需要的接口。这个原则指导我们在设计接口时应当注意一下几点:
1、一个类对一类的依赖应该建立在最小的接口之上。
2、建立单一接口,不要建立庞大臃肿的接口。
3、尽量细化接口,接口中的方法尽量少(不是越少越好,一定要适度)。

二、实例

接口隔离原则符合我们常说的高内聚低耦合的设计思想,从而使得类具有很好的可读性、可扩展性和可维护性。我们在设计接口的时候,要多花时间去思考,要考虑业务模型,包括以后有可能发生变更的地方还要做一些预判。所以,对于抽象,对业务模型的理解是非常重要的。下面我们来看一段代码,写一个动物行为的抽象:

// IAnimal 接口
public interface IAnimal {
	void eat();
	void fly();
	void swim();
}
// Bird实现
public class Bird implements IAnimal {
	@Override
	public void eat() {}
	@Override
	public void fly() {}
	@Override
	public void swim() {}
}
// Dog实现
public class Dog implements IAnimal {
	@Override
	public void eat() {}
	@Override
	public void fly() {}
	@Override
	public void swim() {}
}

可以看出,Bird 的 swim()方法可能只能空着,Dog 的 fly()方法显然不可能的。这时候,我们针对不同动物行为来设计不同的接口,分别设计 IEatAnimal,IFlyAnimal 和 ISwimAnimal 接口,来看代码:

public interface IEatAnimal {
	void eat();
}

public interface IFlyAnimal {
	void fly();
}

public interface ISwimAnimal {
	void swim();
}

Dog只能eat和swim:

public class Dog implements ISwimAnimal,IEatAnimal {
	@Override
	public void eat() {}
	@Override
	public void swim() {}
}

我们对比一下类图:
在这里插入图片描述

三、总结

理解“接口隔离原则”的重点是理解其中的“接口”二字。这里有三种不同的理解。

如果把“接口”理解为一组接口集合,可以是某个微服务的接口,也可以是某个类库的接口等。如果部分接口只被部分调用者使用,我们就需要将这部分接口隔离出来,单独给这部分调用者使用,而不强迫其他调用者也依赖这部分不会被用到的接口。

如果把“接口”理解为单个 API 接口或函数,部分调用者只需要函数中的部分功能,那我们就需要把函数拆分成粒度更细的多个函数,让调用者只依赖它需要的那个细粒度函数。

如果把“接口”理解为 OOP 中的接口,也可以理解为面向对象编程语言中的接口语法。那接口的设计要尽量单一,不要让接口的实现类和调用者,依赖不需要的接口函数。

接口隔离原则与单一职责原则的区别

单一职责原则针对的是模块、类、接口的设计。接口隔离原则相对于单一职责原则,一方面更侧重于接口的设计,另一方面它的思考角度也是不同的。接口隔离原则提供了一种判断接口的职责是否单一的标准:通过调用者如何使用接口来间接地判定。如果调用者只使用部分接口或接口的部分功能,那接口的设计就不够职责单一。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/502539.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自学Java多久可以就业?Java这样自学实习都能过万!

昨天有00后学妹私信小源,她在学校已经学过java、C等相关课程,未来想走计算机的方向,问我建议还要学习什么语言,是否需要继续学Java?今天好程序员简单介绍下Java必学的技术!想自学Java的真的可以试一试! 一…

哈希数据结构的概念、实现和应用

一、认识哈希表 1.unordered_set和unordered_map STL实现了两个数据结构unordered_map和unordered_set顾名思义,因为底层的实现方式不同,它们成为了无序的map和set,但是它们的使用与普通的map和set是一样的。 我们可以通过代码测试两种数据…

【力扣--622】设计循环队列

🖊作者 : D. Star. 📘专栏 : 数据结构 😆今日分享 : 丢脸其实并没有那么可怕,我们可以从另一个角度来想:别人能够记住我了,而且过了还有多少人能记得我呢?虽然这种出场不太优雅😆 设…

python制作散点动图

目录 示例1:简单的散点图示例2:添加颜色和大小示例3:实时更新动图完整代码 本教程将介绍如何使用Python制作散点动图。我们将通过三个示例代码,从易到难,逐步说明如何使用Python绘制出散点动图。 示例1:简单…

图书馆客流人数统计分析系统方案

智慧客流人数统计分析系统可以帮助图书馆管理者更好地管理人群流量。系统能够自动统计区域内的人流量高峰期,并通过数据分析提供更加合理的管控,从而提区域内人群流动性,避免拥堵的情况。 AI客流视觉监控 客流量管控分析系统意义 讯鹏客流量管…

雪花算法生成ID

1.简介 SnowFlake 中文意思为雪花,故称为雪花算法。最早是 Twitter 公司在其内部用于分布式环境下生成唯一 ID。在2014年开源 scala 语言版本。 雪花算法的原理就是生成一个的 64 位比特位的 long 类型的唯一 id。 最高 1 位固定值 0,因为生成的 id 是…

Python的HTTP库及示例

13.3 HTTP库 HTTP(Hyper Text Transfer Protocol)是一个客户端和服务器端请求和应答的标准。客户端是终端用户,服务器端是网站。客户端发起一个到服务器上指定端口的HTTP请求,服务器向客户端发回一个状态行和响应的消息。 可以…

ICV: 2025年全球QKD产业规模有望达到25亿美元

近日,专注于量子、智能驾驶等前沿科技领域的国际咨询机构ICV发布了《全球量子安全通信产业研究报告》,报告主要内容包括量子安全通信的概念、量子密钥分发 (QKD)发展历程、QKD的优势、产业链、应用领域、QKD产业规模及预测、全球主要参与者。 量子安全通…

ubuntu18.04中PCL点云库依赖的安装以及PCL点云库和Eigen的卸载与安装

一、PCL点云库依赖的安装、遇到问题的解决方法 sudo add-apt-repository ppa:v-launchpad-jochen-sprickerhof-de/pcl sudo apt-get update sudo apt-get install libpcl-all 以上是官方给出的,但是会出很多报错,这里建议自己配置。 配置步骤&#xff…

【Android学习专题】安卓样式学习(学习内容记录)

学习记录内容来自《Android编程权威指南(第三版)》 样式调整和添加 调整颜色资源(res/values/colors.xml) 格式: 添加样式(res/values/styles.xml),(创建BeatBox项目时…

开源狂潮让巨头惨败!谷歌内部文件曝光:我们和OpenAI都没有护城河

因为开源,AI军备竞赛,谷歌和OpenAI全是输家? 来源丨新智元 重磅! 谷歌的一份名为《我们没有护城河,OpenAI也没有》的内部文件疑似被泄露, 今天早上,外媒SemiAnalysis公布了这份重磅炸弹泄露…

日撸 Java 三百行day45

文章目录 说明day45 冒泡排序1. 基本思路2.代码 说明 闵老师的文章链接: 日撸 Java 三百行(总述)_minfanphd的博客-CSDN博客 自己也把手敲的代码放在了github上维护:https://github.com/fulisha-ok/sampledata day45 冒泡排序 …

IP地址技术原理

IP地址用于唯一地标识一个网络设备(如计算机、路由器等)在互联网或局域网中的位置。IP地址由32位二进制数表示,通常分为4个8位二进制数,每个数用点号隔开,如106.110.92.215。IP地址可用于数据传输、网络管理和安全控制…

Springboot +Flowable,服务任务ServiceTask执行的三种方式(一)

一.简介 ServiceTask 从名字上看就是服务任务,它的图标是像下面这样,截图如下: ServiceTask 一般由系统自动完成,当流程走到这一步的时候,不会自动停下来,而是会去执行我们提前在 ServiceTask 中配置好的…

托福高频真词List06 // 附阅读真题 14:26~15:12 // 15:12~16:12

目录 生词 熟词 阅读真题 生词 inducecausecause the formation of increasestimulate(导致) v 导致 inevitableunavoidable certainnecessary(不可避免地) adj 不可避免的accommodateallowv 顺应 modestreasonablesmall modera…

【Git 教程】—git指令详细解析,上机操作,简单易懂

目录 一. 集中式和分布式的区别 1. 集中式版本控制工具 2. 分布式版本控制工具 3. 基本概念 4. 配置信息 二. 创建本地仓库(git init) 三.基础指令 1. 获取git版本号 2.查看文件的状态 3. 查看提交记录 4. 版本回退 5. git reflog 6. .gitignore文件…

数据机房温湿度监控系统解决应用案例

机房温湿度监控系统之POE以太网温湿度传感器解决方案 物联网工业级高精度传感器 以太网智能RJ45温湿度传感器(POE12VDC供电型) 智 能 传 感 器 介 绍 目 录 一、关键词…………………………………………………………………………3 二、 产品概述…

51单片机 | DS18B20 温度传感器实验

系统设计 设计要求 (1) 主体电路包括晶振、复位、电源指示电路,预留程序下载接口; (2) 要求能够实现温度数值的自动显示,值根据实际温度变化自动变化。 (3) 并按照题目要求完成程序源码编写、调试及关键代码注释。 设计任务 使用给定硬件…

C++两个区间的比较?——STL之equal()算法和mismatch()算法

equal()算法 检验相等性 bool equal(InputIterator1 beg,InputIterator1 end,InputIterator2 cmpBeg)bool equal(InputIterator1 beg,InputIterator1 end,InputIterator2 cmpBeg,BinaryPredicate op) 第一形式判断区间…

mongodb命令使用

查询副本集当前状况(需要将命令行切换到需要查询的副本集中) rs.status() 查询数据库当前情况 sh.status() 查询数据分片情况 db.集合名称.getShardDistribution() 查看集合当前情况 db.集合名称.stats() 查看集合是否开启分片 db.集合名称.stats().sharded 查看mong…