Prompts-MCP 686 skills · ai / design / design-pattern / framework / fundamentals / habit / lang / tech-selection /mcp/sse
design-pattern design-pattern/solid/interface-segregation.md medium

solid-interface-segregation

接口隔离原则 ISP — 接口要小而专,客户端不应被迫依赖它用不到的方法,胖接口按角色拆成多个小接口。Use when 实现类被迫空实现方法 / 设计接口粒度 / 评审一个接口塞太多方法时。

接口隔离isp胖接口拆分角色接口interface segregation
paths
  • *.java

SOLID · 接口隔离 ISP

本条只管「接口该多大」。类层面的职责拆分见 single-responsibility.md

规则

判据 要求
小而专 一个接口只描述一种角色/能力,方法围绕同一用途
不强加依赖 客户端只看到自己用得到的方法
按角色拆 一个类可实现多个小接口,组合出完整能力
信号 实现类里出现空方法 / throw new UnsupportedOperationException() → 接口太胖

正例:按角色拆小接口

public interface Readable { String read(); }
public interface Writable { void write(String data); }

// 只读设备只实现需要的接口
public class SensorDevice implements Readable {
    public String read() { return "..."; }
}

// 读写设备组合两个小接口
public class FileDevice implements Readable, Writable {
    public String read() { return "..."; }
    public void write(String data) { /* ... */ }
}

反例:胖接口逼迫空实现

// ❌ 一个大接口塞所有能力
public interface Device {
    String read();
    void write(String data);
    void print();
    void scan();
}

// 只读传感器被迫实现一堆用不到的方法
public class SensorDevice implements Device {
    public String read() { return "..."; }
    public void write(String d) { throw new UnsupportedOperationException(); } // 坏味道
    public void print() { /* 空实现 */ }
    public void scan()  { /* 空实现 */ }
}

自检

  • [ ] 每个接口只描述一种角色/能力,方法围绕同一用途?
  • [ ] 没有实现类被迫写空方法或抛 UnsupportedOperationException?
  • [ ] 需要多能力的类靠实现多个小接口组合,而非依赖一个胖接口?
  • [ ] 客户端只看到它真正调用的方法?

相关