| 问题 | 胖接口 + 空实现/抛异常的占位方法 |
|---|---|
| 做法 | 按使用方视角拆分角色接口 |
| 收益 | 依赖更少、实现类负担更轻 |
角色接口示例
角色接口示例
// 之前:Worker { work(); eat(); } 导致机器人吃空方法
// 之后
interface Workable { void work(); }
interface Feedable { void eat(); }与 SRP 的差别:SRP 管实现的修改原因,ISP 管调用方的依赖视图。
客户不应被迫依赖它们不使用的接口(Martin 表述):大而全的接口拆成面向调用者的细接口,实现类不必为空方法占位,调用方依赖面收窄。
| 问题 | 胖接口 + 空实现/抛异常的占位方法 |
|---|---|
| 做法 | 按使用方视角拆分角色接口 |
| 收益 | 依赖更少、实现类负担更轻 |
// 之前:Worker { work(); eat(); } 导致机器人吃空方法
// 之后
interface Workable { void work(); }
interface Feedable { void eat(); }