软件设计原则之接口隔离原则

2024-08-28 06:52

本文主要是介绍软件设计原则之接口隔离原则,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

接口隔离原则(Interface Segregation Principle, ISP)是面向对象设计中的一个重要原则,它属于SOLID原则之一。这个原则强调客户端(即接口的调用者)不应该被迫依赖于它们不使用的方法。换句话说,一个类对另一个类的依赖应该建立在最小的接口上。接口隔离原则的主要目的是使系统更加模块化,易于维护和扩展。

目录

  • 接口隔离原则的核心思想
  • 接口隔离原则的优点
  • 应用场景
  • 接口隔离的比方
  • 应用开发实例
  • 缺点

接口隔离原则的核心思想

高内聚低耦合: 接口的设计应尽量做到高内聚,即接口中的方法都围绕一个共同的目标;同时接口间的耦合度要低,每个接口只承担单一的职责。
小接口优于大接口: 如果一个大接口中的部分方法被部分调用者使用,而另一部分方法被其他调用者使用,那么这个大接口就应该被拆分成几个小接口,让调用者只依赖它们需要的接口。
客户端不应依赖它不使用的方法: 一个接口如果有一些方法是不被某类使用的,那么这个接口对于这些类来说就是过于庞大,需要拆分成更小的接口。

接口隔离原则的优点

降低系统间的耦合度: 通过拆分接口,使得各个类之间的依赖关系更加明确,减少了不必要的依赖,从而降低了系统间的耦合度。
提高系统的灵活性:由于接口变小、职责单一,使得接口易于被替换和修改,提高了系统的灵活性。
增强系统的可维护性: 由于每个接口都相对较小,易于理解和维护,同时当接口需要修改时,影响的范围也较小。

应用场景

当一个接口中的方法被不同的类以不同的方式使用时: 这些方法应该被拆分到不同的接口中。
当系统的扩展性要求较高时: 通过遵循接口隔离原则,可以更容易地添加新的接口和实现类,而不需要修改现有的接口和实现类。
当系统的维护性要求较高时: 接口隔离原则使得接口更加清晰、简单,易于理解和维护。

接口隔离的比方

就违反 ISP 规定而言,下面的图片显示了一个大垃圾箱,用来扔掉各种垃圾,没有任何隔离措施。
在这里插入图片描述

使用 ISP,下面的图像是我们现实生活中隔离的一个很好的例子。在这里插入图片描述

应用开发实例

下面是一个银行客户的例子,银行客户的类型如下:
企业客户: 为企业员工服务。
零售客户: 个人,日常银行业务。
潜在客户: 他们只是一个银行客户,还没有持有银行的产品,这只是一个记录,不同于公司和零售。
未遵守ISP
乍看起来还可以,但是对于有问题的客户来说,这是一个很大的接口,因为它强制客户端类实现不需要的方法。
如果所描述的潜在客户不持有任何产品,则必须实现产品属性。
一个潜在客户和一个零售客户都被迫拥有一个客户结构属性,但是在真实的场景中,一个公司客户拥有一个描述客户层次结构的客户结构。
潜在客户和零售客户都必须实现 BusinessType,但它只属于公司客户。
一个公司客户和一个潜在客户被迫实现一个“Occupation”属性,这个属性对于潜在客户来说不存在。
前面问题的一个解决方案是将胖接口分割成有意义的部分,换句话说,小接口,因此客户类型只实现它所需要的接口。

在这里插入图片描述

缺点

1、接口大爆炸: 如果接口拆分的非常细,可能会导致接口数量急剧增加,形成所谓的“接口大爆炸”。这会增加系统的复杂性和管理难度,因为开发者需要维护更多的接口文档和代码。
2、性能开销: 在某些情况下,细化的接口可能会导致性能下降。因为每次调用接口时都需要进行额外的类型检查和转换操作,这会增加系统的运行开销。特别是在高频调用的场景下,这种开销可能会更加明显。
3、开发成本增加: 随着接口数量的增加,开发成本也会相应增加。开发者需要为每个接口编写和维护代码,这增加了开发和维护的工作量。同时,过多的接口也可能导致团队成员之间的沟通成本上升。
4、理解和使用难度: 对于新加入项目的开发者来说,面对大量的细粒度接口可能会感到困惑和难以理解。他们需要花费更多的时间和精力来熟悉和掌握这些接口的使用方法和规则

这篇关于软件设计原则之接口隔离原则的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1114045

相关文章

JVM内存调优原则及几种JVM内存调优方法

JVM内存调优原则及几种JVM内存调优方法 1、堆大小设置。 2、回收器选择。   1、在对JVM内存调优的时候不能只看操作系统级别Java进程所占用的内存,这个数值不能准确的反应堆内存的真实占用情况,因为GC过后这个值是不会变化的,因此内存调优的时候要更多地使用JDK提供的内存查看工具,比如JConsole和Java VisualVM。   2、对JVM内存的系统级的调优主要的目的是减少

读软件设计的要素04概念的关系

1. 概念的关系 1.1. 概念是独立的,彼此间无须相互依赖 1.1.1. 一个概念是应该独立地被理解、设计和实现的 1.1.2. 独立性是概念的简单性和可重用性的关键 1.2. 软件存在依赖性 1.2.1. 不是说一个概念需要依赖另一个概念才能正确运行 1.2.2. 只有当一个概念存在时,包含另一个概念才有意义 1.3. 概念依赖关系图简要概括了软件的概念和概念存在的理

水处理过滤器运行特性及选择原则浅谈

过滤属于流体的净化过程中不可缺的处理环节,主要用于去除流体中的颗粒物或其他悬浮物。水处理过滤器的原理是利用有孔介质,从流体中去除污染物,使流体达到所需的洁净度水平。         水处理过滤器的滤壁是有一定厚度的,也就是说过滤器材具有深度,以“弯曲通 道”的形式对去除污染物起到了辅助作用。过滤器是除去液体中少量固体颗粒的设备,当流体进入置有一定规格滤网的滤筒后,其杂质被阻挡,而

读软件设计的要素03概念的组合

1. 概念的组合 1.1. 概念不像程序那样,可以用较大的包含较小的 1.1.1. 每个概念对用户来说都是平等的,软件或系统就是一组串联运行的概念组合 1.2. 概念是通过操作来同步组合的 1.2.1. 同步并不增加新的概念操作,但会限制已有的操作,从而消除一些独立概念可能会出现的操作序列 1.3. 在自由组合中,概念彼此独立,仅受一些记录的约束,这些约束是为了确保概念对事物观点的一

《论软件设计模式及其应用》通关范文,软考高级系统架构设计师

论文真题 设计模式(Design Pattern)是一套被反复使用的代码设计经验总结,代表了软件开发人员在软件开发过程中面临的一般问题的解决方案和最佳实践。使用设计模式的目的是提高代码的可重用性,让代码更容易被他人理解,并保证代码可靠性。现有的设计模式已经在前人的系统中得以证实并广泛使用,它使代码编写真正实现工程化,将已证实的技术表述成设计模式,也会使新系统开发者更加容易理解其设计思路。根据

软件设计之JDBC(3)

软件设计之JDBC(3) 此篇应在MySQL之后进行学习: 路线图推荐: 【Java学习路线-极速版】【Java架构师技术图谱】 尚硅谷2024最新JDBC教程 | jdbc基础到高级一套通关! 资料可以去尚硅谷官网免费领取 学习内容: JDBC优化及工具类的封装ThreadLocal概述DAO概念及搭建事务的概述 1、JDBC优化及工具类的封装 JDBC过程中,部分代码存在冗余问题

读软件设计的要素02概念的目的

1. 要素 1.1. 概念的定义包括名称、目的、状态、操作和操作原则 1.2. 操作原则(operational principle) 1.2.1. 操作原则用于展示如何通过操作实现目的,这是理解概念的关键 1.2.2. 展示如何通过操作的组合实现概念的目的,包含一个或多个典型的使用场景 1.2.3. 操作原则并没有增加任何信息,因为你完全可以从操作规范中推理出任何使用场景 1

【软件设计】常用设计模式--工厂模式

软件设计模式(二) 一、工厂模式(Factory Pattern)1. 概念2. 工厂模式的类型3. 实现方式(1)简单工厂模式C# 实现Java 实现 (2)工厂方法模式C# 实现Java 实现 (3)抽象工厂模式C# 实现Java 实现 4. 优点5. 缺点6. 适用场景小结 二、工厂模式变体1. 简单工厂模式的变体变体1: 参数化工厂C# 示例 变体2: 反射工厂C# 示例 2.

重写equals和hashCode的原则规范

当符合以下条件时不需要重写equals方法:     1.     一个类的每一个实例本质上都是唯一的。     2.     不关心一个类是否提供了“逻辑相等”的测试功能     3.     超类已经改写了equals方法,并且从超类继承过来的行为对于子类也是合适的。     4.     一个类时私有的或者是package私有的,并且可以确定它的equals方法永远不会被调用。(这

职场关系课:职场上的基本原则(安全原则、进步原则、收益原则、逃生舱原则)

文章目录 引言安全原则进步原则收益原则逃生舱原则 引言 职场上的王者,身体里都应该有三个灵魂: 一个文臣,谨小慎微,考虑风险; 一个武将,积极努力,谋求胜利; 一个商人,精打细算,心中有数。 安全原则 工作安全:保住自己的工作和位置信用安全:保住个人的信用,如果领导看到了你的信用受损,你和领导的关系可能会持续恶化。人身安全:有的时候你会遇到偏执的人,要及时和