目录
接口隔离原则(Interface Segregation Principle, ISP)是面向对象设计中的七大基本原则之一(通常合称为 SOLID 原则)。它强调接口设计的重要性,主要体现在减少类间的依赖和提高系统的灵活性与可维护性。
一、要点
1.避免肿大接口
接口应该小而专一,尽量避免创建包含过多方法的庞大接口。每个接口应只包含客户端所需要的方法。
2.专用接口
多个特定客户端应该拥有各自专用的接口,而不是共享一个通用的接口。这样可以提高模块之间的独立性。
3.降低依赖性
实现一个接口的类不应该依赖它不需要的方法。通过细化接口,可以减少类与类之间的依赖,降低系统的复杂性。
4.灵活性和可扩展性
小的接口使得系统更灵活,更易于扩展和维护。如果需要新增功能,只需添加新接口,而不会影响到已有的代码。
5.遵循单一职责原则
每个接口应该只关注一项功能,使得其实现类能够更专注于某一具体的实现,提升代码的可读性和可维护性。
二、示例
假设有一个动物接口Animal,包含多个方法
java
interface Animal {
void eat();
void fly();
void swim();
}
在这个设计中,不同的动物类(如狗、鸟、鱼)都需要实现这个接口,而大多数动物并不具备所有的能力。这种设计使得实现这些类时,需要提供无用的方法实现,增加了复杂性:
java
interface Eater {
void eat();
}
interface Flyer {
void fly();
}
interface Swimmer {
void swim();
}
然后,各个动物类只需实现它们所需的接口:
java
class Dog implements Eater {
@Override
public void eat() {
System.out.println("Dog is eating");
}
}
class Bird implements Eater, Flyer {
@Override
public void eat() {
System.out.println("Bird is eating");
}
@Override
public void fly() {
System.out.println("Bird is flying");
}
}
class Fish implements Eater, Swimmer {
@Override
public void eat() {
System.out.println("Fish is eating");
}
@Override
public void swim() {
System.out.println("Fish is swimming");
}
}