趣解接口隔离原则之《做个Rapper咋这么难?》

news2024/11/25 16:53:18

〇、小故事

不知道大家是否看过这样一个短视频——“姐姐去找她的弟弟,因为她的弟弟想要当rapper而荒废了学业,姐姐多番劝导也没有用,最后一怒一下,把弟弟的rapper发型剃了。没有了帅气的rapper发型,弟弟也放弃了当rapper的想法了。”

这时候有的同学可能就会问,“扯淡!发型剃掉了就不当rapper了?rapper是靠发型出道的?”嗯,有这种质疑非常好,但是,视频中的弟弟或许就是认为外表照着某些rapper打造,自己就是rapper了呗。其实也不必嘲笑他,估计大家在小的时候,都有过看了某部动画片之后,就去买动画片中主角的周边产品,然后自己就瞬间主角附体了。

那什么才是真正的rapper?这个定义估计在大家的心中也各不相同。比如:

特征1】说唱功底很厉害
特征2】唱功也一定要厉害
特征3】要会freestyle
特征4】需要自己写词写曲
特征5】穿衣服一定要又潮又帅
特征6】要有纹身
……

好,经过大家各抒己见,我们或许最终会收集到大概30个左右的特征,如果跟上面视频中的小伙子说,如果你相当rapper,把这30特征都要达到标准,估计这个小伙子自己就放弃了。“这要当rapper也太难了吧,算了算了,不当了不当了”。

你看看,我想当个rapper,需要满足的条件太多了啊!这还咋当了。那么,如果我们真的要定义一个Rapper接口,我们需要哪些必不可少的能力?

特征1】说唱功底很厉害
特征3】要会freestyle(这条其实可以去掉,因为有的Rapper确实不会freestyle,此处就暂且算上)

那么,如果说相当rapper,只需要满足2个特征,是不是又可以点燃这个小伙子相当Rapper的梦了? 所以,从以上的故事我们可以得出一个设计原则,那就是针对接口(Rapper)来说,不要设计的过于臃肿(30个特征),只需要包含必要的方法即可(2个特征),否则对于接口的实现者来说,会是一个巨大的负担(小伙放弃当Rapper了)。

一、原则定义

接口隔离原则(ISP:Interface Segregation Principle)

使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。

建立单一接口,不要建立臃肿庞大的接口。接口尽量细化,同时接口中的方法尽量少。

单一职责原则和接口隔离的区别?答:它们的审视角度不同

单一职责要求的是类和接口职责单一,注重的是职责,这是业务逻辑上的划分。
接口隔离原则要求接口的方法尽量少

具体来说,实现接口隔离原则需要关注以下3点:

接口要尽量小】不要违反单一职责原则,要适度的小,要适度。
接口要高内聚】提高接口、类、模块的处理能力,减少对外的交互。
定制服务】通过对高质量接口的组装,实现服务的定制化。

二、原则实践

以上面为例,我们最初设想的Rapper接口需要具有以下特征:

特征1】说唱功底很厉害
特征2】唱功也一定要厉害
特征3】要会freestyle
特征4】需要自己写词写曲
特征5】穿衣服一定要又潮又帅
特征6】要有纹身
……

那么,我们可以将相关的特征抽象为不同的接口,例如:

  • 接口Rapper

特征1】说唱功底很厉害
特征4】需要自己写词写曲

  • 接口Singer

特征2】唱功也一定要厉害
特征4】需要自己写词写曲

  • 接口FashionMan

特征5】穿衣服一定要又潮又帅
特征6】要有纹身

这样的话,实现不同特性的Rapper,也可以通过实现多个接口的方式,来组合出相应的Rapper了。

今天的文章内容就这些了:

写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享 。

更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」

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

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

相关文章

数据结构与算法-选择冒泡快排计数

一:选择排序 场景:找出一个班上身高最高的人你会怎么找?A B C D A B 选择排序的思路和插入排序非常相似,也分已排序和未排序区间。但选择排序每次会从未排序区间中找到最小的元素,将其放到已排序区间的末尾。但是不像插…

SetWindowDisplayAffinity 函数设置窗体透明

#define WDA_NONE 0x00000000 #define WDA_MONITOR 0x00000001 #define WDA_EXCLUDEFROMCAPTURE 0x00000011 c#调用示例 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.L…

从金融史、司法体系与技术周期来看,RWA的万亿叙事经不起推敲?

加密市场走向低迷,但RWA(Real World Assets,真实世界资产)概念却不断升温,成为这个行业里为数不多各方都承认的宏大叙述,吸引了高盛、花旗等传统机构的兴趣。不过从金融史、司法体系与区块链技术周期等方面…

Linux基本指令及其使用

前言:前面我们学习了Linux环境的简单配置和XShell7的安装,并将云服务器部署连接到XShell本地来使用,今天,我们就一起来学习一些Linux的基本指令及其使用,为后续的Linux的学习打基础,下面,马上开…

openGauss学习笔记-64 openGauss 数据库管理-创建和管理表空间

文章目录 openGauss学习笔记-64 openGauss 数据库管理-创建和管理表空间64.1 背景信息64.2 注意事项64.3 操作步骤64.3.1 创建表空间64.3.2 在表空间中创建对象64.3.3 查询表空间64.3.4 查询表空间使用率64.3.5 修改表空间64.3.6 删除表空间 openGauss学习笔记-64 openGauss 数…

vite+vue3项目中集成ESLint与prettier

1. 集成eslint 1.1 安装eslint npm add -D eslint1.2 初始化ESLint配置 npx eslint --init1.3 配置初始化选择 我的选择如下: 安装完成后(根目录会生成.eslintrc.js文件) 这个配置文件是默认生成的 1.4 eslint不生效解决方案 检查vscode…

DEFORMABLE DETR: DEFORMABLE TRANSFORMERS FOR END-TO-END OBJECT DETECTION (论文解析)

DEFORMABLE DETR: DEFORMABLE TRANSFORMERS FOR END-TO-END OBJECT DETECTION 摘要1 介绍2 相关工作3 重新审视 Transformers 和 DETR4 方法4.1 用于端到端目标检测的可变形transformer4.2 Deformable Detr的其他改进和变型5 实验5.1 和DETR 比较5.2 消融实验5.3 与最先进方法的…

python数据分析之Pandas库(一)

Pandas介绍 Pandas有两种常用的数据结构: Series (一维数据)与 DataFrame(二维数据)。 Series 是一种类似于一维数组的对象,能保存不同数据类型。 DataFrame 是一个二维的表格型的数据结构。 一、导入 i…

网络编程(一):服务器模型、Java I/O模型、Reactor事件处理模型、I/O复用

文章目录 一、Socket和TCP/IP协议族的关系二、服务器模型1.C/S模型(Client/Server Model)2.P2P模型(Peer-to-Peer Model) 三、Java的I/O演进1.BIO(阻塞)(1)工作流程(2&am…

MATLAB实现函数拟合

目录 一.理论知识 1.拟合与插值的区别 2.几何意义 3.误差分析 二.操作实现 1.数据准备 2.使用cftool——拟合工具箱 三.函数拟合典例 四.代码扩展 一.理论知识 1.拟合与插值的区别 通俗的说,插值的本质是根据现有离散点的信息创建出更多的离散点&#xf…

HashMap解决哈希冲突

要了解 Hash冲突,那首先我们要先了解 Hash 算法和 Hash 表。 Hash算法 Hash 算法,就是把任意长度的输入,通过散列算法,变成固定长度的输出,这个输出结果是散列值。 Hash表 Hash 表又叫做“散列表”,它是通…

7.Xaml Image控件

1.运行图片 2.运行源码 a.xaml源码 <!--Source="/th.gif" 图像源--><!--Stretch="Fill" 填充模式--><Image x:Name

Qemu 架构 硬件模拟器

Qemu 架构 硬件模拟器 Qemu 是纯软件实现的虚拟化模拟器&#xff0c; 几乎可以模拟任何硬件设备&#xff0c; 我们最熟悉的就是能够模拟一台能够独立运行操作系统的虚拟机&#xff0c; 虚拟机认为自己和硬件打交道&#xff0c; 但其实是和 Qemu 模拟出来的硬件打交道&#xff…

单元测试界的高富帅,Pytest框架 (二) 前后置方法和 fixture 机制

前言 上一篇文章入门篇咱们介绍了pytest的基本使用&#xff0c;这一篇文章专门给大家讲解pytest中关于用例执行的前后置步骤处理,pytest中用例执行的前后置处理既可以通过测试夹具(fixtrue)来实现&#xff0c;也可以通过xunit 风格的前后置方法来实现。接下来我们一起看看如何…

利用procrank和lsof定位出客户软件内存OOM的问题

最近遇到一些事情&#xff0c;觉得挺憋屈的&#xff0c;可是再憋屈总得往前走吧&#xff01;打工人&#xff0c;不好办啊&#xff01;事情是这样的&#xff0c;笔者在芯片原厂负责SDK和行业解决方案输出的&#xff0c;可以理解成整体SDK turnkey方案。但是有些客户多少还要改一…

单例模式(饿汉式单例 VS 懒汉式单例)

所谓的单例模式就是保证某个类在程序中只有一个对象 一、如何控制只产生一个对象&#xff1f; 1.构造方法私有化&#xff08;保证对象的产生个数&#xff09; 创建类的对象&#xff0c;要通过构造方法产生对象 构造方法若是public权限&#xff0c;对于类的外部&#xff0c;可…

企业架构LNMP学习笔记31

负载均衡服务器的高可用备用服务器配置&#xff1a; 负载均衡服务器的配置比单台服务器的配置要高很多。硬件上要上一个台阶。 所有的请求流量都要经过负载均衡服务器&#xff0c;负载均衡服务器压力很大&#xff0c;防止她宕机&#xff0c;导致后端web服务器都不可用&#xf…

ROS2下使用TurtleBot3-->SLAM导航(仿真)RVIZ加载不出机器人模型

一、问题描述 在使用台式机进行仿真时&#xff0c;大部分例程很顺利&#xff0c;但在SLAM导航时&#xff0c;在RVIZ中却一直加载不出机器人模型&#xff0c;点击Navigation2 Goal选择目标点进行导航时&#xff0c;无响应。 启动后在RVIZ2和终端看到一个错误 按照官网的指令试…

探索 Wall-E 的寻路算法

几年前,Yandex 组织了一场名为“机器人快递员”的竞赛,并提供了诱人的奖品:一张参加专业人士封闭式自动驾驶会议的门票。该竞赛类似于一场游戏,参与者的任务是在地图上找到最佳路线并使用机器人快递员优化送货。 当我深入研究这个主题时,我发现尽管路线查找问题已经解决,…

ms17-010(永恒之蓝)漏洞复现

目录 前言 一、了解渗透测试流程 二、使用nmap工具对win7进行扫描 2.1 2.2 2.3 2.4 2.5 三、尝试ms17-010漏洞利用 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 四、结果展示 4.1 4.2 4.3 4.4 4.5 总结 前言 ms17-010&#xff08;永恒之蓝&am…