定义:
接口隔离原则强调“不应该强迫客户程序依赖它们不需要的接口”。该原则要求将臃肿的接口拆分为更小且更具体的接口,这样客户程序只需要知道和关心它们真正使用的方法。
解决的问题:
- 减少系统的依赖性,避免一处修改导致多处变更。
- 提高系统的灵活性和可维护性。
- 使代码更加清晰,职责划分更明确。
使用场景:
- 当一个接口的方法太多,且不是所有使用该接口的类都需要这些方法时。
- 设计接口之初,预见到不同的客户类需要不同的服务集合时。
示例代码:
// 不遵守接口隔离原则的例子
interface Worker {
void work();
void eat();
}
class HumanWorker implements Worker {
public void work() {
// 实现工作
}
public void eat() {
// 实现吃饭
}
}
class RobotWorker implements Worker {
public void work() {
// 实现工作
}
public void eat() {
// 机器人不需要吃饭,但仍需实现该方法
}
}
// 遵守接口隔离原则的重构
interface Workable {
void work();
}
interface Eatable {
void eat();
}
class HumanWorker implements Workable, Eatable {
public void work() {
// 实现工作
}
public void eat() {
// 实现吃饭
}
}
class RobotWorker implements Workable {
public void work() {
// 实现工作
}
// 机器人不需要实现Eatable接口
}
在上述示例中,不遵守接口隔离原则的版本中,RobotWorker
被迫实现了它不需要的eat
方法。遵守原则的重构将Worker
接口分成了Workable
和Eatable
两个接口,这样每个类只需实现对它们有意义的接口。