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

ISP接口隔离原则

任何层次的软件设计如果依赖了它并不需要的东西,就会带来意料之外的麻烦。ISP强调使用多个特定的接口,而不是一个总接口,避免依赖不需要的接口。即不需要则不应该知道。

ISP特点

  • 降低耦合度:客户端只依赖它需要的接口,减少对其他接口的依赖,从而降低系统的耦合度。
  • 提高灵活性:接口的拆分使得系统更灵活,可以更容易地扩展和修改。
  • 符合开闭原则:通过接口的细分,可以更好地满足开闭原则,即对扩展开放,对修改封闭。

示例代码

不符合ISP的代码

// 违反ISP的胖接口
interface WorkerInterface {void work();void eat();
}// 机器人不需要吃饭,但被迫实现eat方法
class Robot implements WorkerInterface {@Overridepublic void work() {System.out.println("Working...");}@Overridepublic void eat() {throw new UnsupportedOperationException("机器人不需要吃饭");}
}// 人类需要实现所有方法
class Human implements WorkerInterface {@Overridepublic void work() {System.out.println("Working...");}@Overridepublic void eat() {System.out.println("Eating...");}
}

不符合ISP

使用ISP优化后的代码

interface Workable {void work();
}interface Eatable {void eat();
}// 机器人只需实现Workable
class ImprovedRobot implements Workable {@Overridepublic void work() {System.out.println("Working...");}
}// 人类实现两个接口
class ImprovedHuman implements Workable, Eatable {@Overridepublic void work() {System.out.println("Working...");}@Overridepublic void eat() {System.out.println("Eating...");}
}

符合ISP

接口隔离与其他设计原则的关系

与单一职责原则(SRP)的关系
  • 联系:SRP 关注类的职责单一,而 ISP 关注接口的职责单一。
  • 区别:SRP 针对实现类,ISP 针对接口。
与依赖倒置原则(DIP)的关系
  • 联系:DIP 要求高层模块依赖抽象接口,而 ISP 确保这些接口是最小化的。
  • 协同效应:结合使用可降低系统耦合度。

在设计中遵循ISP

采用 “客户端驱动” 的接口设计
根据客户端需求定义接口,而非根据实现定义接口。这一点非常重要,研发经常是根据实现定义接口,导致接口无限膨胀。

使用接口继承拆分胖接口
将大接口拆分为多个小接口,通过继承组合。

优先使用组合而非继承
通过组合多个小接口实现复杂功能,避免类继承不必要的方法。

编写单元测试验证接口边界
确保客户端只依赖它需要的方法,不依赖多余接口。

参考

《架构整洁之道》-- Robert C.Mattin

《架构师的自我修炼》 – 李智慧

《设计模式之美》 – 王争

http://www.dtcms.com/a/182351.html

相关文章:

  • [架构之美]linux常见故障问题解决方案(十九)
  • 【计算机视觉】优化MVSNet可微分代价体以提高深度估计精度的关键技术
  • Koodo Reader:功能强大、体验卓越的电子书阅读器
  • Android 应用开发入门案例:使用 Fragment 实现水果详情展示
  • Linux系统:虚拟文件系统与文件缓冲区(语言级内核级)
  • 蓝牙身份证阅读器使用Uniapp调用二次开发demo
  • 湖北理元理律师事务所:债务优化如何实现还款与生活的平衡?
  • 【具身智能算法入门】VLM/VLA 算法入门指南
  • Spring Cloud: Nacos
  • 全栈开发实战:FastAPI + React + MongoDB 构建现代Web应用
  • PyTorch API 5 - 全分片数据并行、流水线并行、概率分布
  • 2025年RAG技术有哪些创新点?
  • Octave 绘图快速入门指南
  • Java云原生到底是啥,有哪些技术
  • 【目录】学习如何使用dify建设专业知识库
  • C语言_程序的段
  • 蔚来三品牌大整合:乐道产品研发、销售体系并入蔚来各集群|36氪独家
  • Ceph集群故障处理 - PG不一致修复
  • FPGA笔试题review
  • Java大数据可视化在城市空气质量监测与污染溯源中的应用:GIS与实时数据流的技术融合
  • OSPF综合性实验
  • 判断点与椭球的位置关系及计算连线交点的数学原理与Babylon.js实现
  • 记录 ubuntu 安装中文语言出现 software database is broken
  • visual studio 2015 安装闪退问题
  • 1 计算机网络
  • 无线网络设备中AP和AC是什么?有什么区别?
  • OpenAI API JSON 格式指南与json_repair错误修复
  • React文档-State数据扁平化
  • 利用大型语言模型有效识别网络威胁情报报告中的攻击技术
  • 前端面试题:说说你对 Vue 中异步组件的理解