同一实现类实现多接口的架构是否违反接口分离原则(ISP)?
该实现是否违反接口分离原则(ISP)?
结论:没有违反ISP,原因如下:
1. ISP的核心要求
接口分离原则的核心是:客户端不应该被迫依赖它不需要的接口方法。它解决的是“臃肿大接口”导致客户端冗余依赖的问题,重点聚焦客户端的依赖范围,而非实现类的内部结构。
2. 你的实现完全符合ISP设计目标
Reader类仅依赖DbReader接口(仅包含read()方法),它不需要知晓write()的存在,也不会被迫依赖该方法;Writer类仅依赖DbWriter接口(仅包含write(obj)方法),同理不会接触到read()方法。
两个客户端都只依赖自身需要的最小接口单元,完全契合ISP的设计初衷。
3. 关于你提到的两个疑问解答
- “Reader依赖的是DbConcrete的实例”:这里的依赖本质是面向抽象编程——
Reader的代码应基于DbReader接口编写,而非直接耦合DbConcrete类。运行时传入DbConcrete实例只是依赖注入的实现细节,Reader只会调用DbReader定义的方法,不会受到DbConcrete中write()方法的影响。 - “修改write()方法时需兼顾read()”:这是具体实现类
DbConcrete的内部耦合问题,属于**单一职责原则(SRP)**的范畴,和ISP无关。ISP不限制一个类实现多个接口,只要每个接口都是客户端需要的最小单元即可。
附你的UML代码(用于生成类图)
@startuml interface DbReader{ {abstract} read() } interface DbWriter{ {abstract} write(obj) } class DbConcrete { read() write(obj) } DbConcrete .up.|> DbReader DbConcrete .up.|> DbWriter Reader ..> DbReader Writer ..> DbWriter @enduml
内容的提问来源于stack exchange,提问作者Alexander Rakhmaev
相关产品推荐
相关产品推荐

