You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在SOLID原则中,能否违反SRP而不违反ISP,或反之亦然?

SRP与ISP:仅违反其一的场景

你的理解是准确的:SRP聚焦于类自身的职责单一性,ISP聚焦于客户端视角的接口最小化。确实存在仅违反其中一项原则的情况,下面用具体场景说明:

1. 仅违反SRP,不违反ISP

假设你有一个UserHandler类,它同时负责两个独立职责:

  • 处理用户数据库的增删改查(数据持久化职责)
  • 生成用户的权限校验令牌(身份认证职责)

现在有两个客户端:

  • UserAdminPanel只调用该类的数据库操作方法
  • AuthService只调用该类的令牌生成方法

这个UserHandler明显违反了SRP——一个类承担了两个完全独立的职责。但每个客户端都只用到自己需要的方法,没有被强迫依赖不需要的接口/方法,所以完全符合ISP的要求。

2. 仅违反ISP,不违反SRP

定义一个过于宽泛的接口Machine,包含start()、stop()、refuel()三个方法。然后实现一个ElectricCar类,它的唯一职责就是作为电动交通工具运行(完全符合SRP)。

但因为ElectricCar实现了Machine接口,它必须空实现refuel()方法(电动车不需要加油)。此时,任何依赖Machine接口来使用ElectricCar的客户端,都会被迫看到这个完全无用的refuel()方法——这就违反了ISP(客户端被强迫依赖不需要的方法),但ElectricCar本身职责单一,并没有违反SRP。

内容的提问来源于stack exchange,提问作者Jaime Arroyo Morales

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 17:52:40