# 3.4 接口隔离原则

# 3.4.1 介绍

  • 将臃肿的接口拆分成更小的和更具体的接口,让接口的实现者更灵活。
  • 用多个接口,而不是使用单一的接口
  • 尽量细化接口,接口中的方法尽量少
  • 复合低耦合的设计思想,提高了可扩展性和可维护性能

客户端不应该被迫依赖于它不使用的方法;一个类对另一个类的依赖应该建立在最小的接口上。

下面看一个例子来理解接口隔离原则

【例】安全门案例

我们需要创建一个黑马品牌的安全门,该安全门具有防火、防水、防盗的功能。可以将防火,防水,防盗功能提取成一个接口,形成一套规范。类图如下:

上面的设计我们发现了它存在的问题,黑马品牌的安全门具有防盗,防水,防火的功能。现在如果我们还需要再创建一个传智品牌的安全门,而该安全门只具有防盗、防水功能呢?很显然如果实现SafetyDoor接口就违背了接口隔离原则,那么我们如何进行修改呢?看如下类图:

代码如下:

AntiTheft(接口):

public interface AntiTheft {
    void antiTheft();
}
1
2
3

Fireproof(接口):

public interface Fireproof {
    void fireproof();
}
1
2
3

Waterproof(接口):

public interface Waterproof {
    void waterproof();
}
1
2
3

HeiMaSafetyDoor(类):

public class HeiMaSafetyDoor implements AntiTheft,Fireproof,Waterproof {
    public void antiTheft() {
        System.out.println("防盗");
    }

    public void fireproof() {
        System.out.println("防火");
    }


    public void waterproof() {
        System.out.println("防水");
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

ItcastSafetyDoor(类):

public class ItcastSafetyDoor implements AntiTheft,Fireproof {
    public void antiTheft() {
        System.out.println("防盗");
    }

    public void fireproof() {
        System.out.println("防火");
    }
}
1
2
3
4
5
6
7
8
9

# 3.4.2 案例

  • 创建人
public interface Human {

}
1
2
3
  • 创建吃饭的行为
public interface EationAction extends Human {
    void eat();
}
1
2
3
  • 创建睡觉的行为
public interface SleepAction extends Human {
    void sleep();
}
1
2
3
  • 学生实现吃和睡觉的行为
public class Student implements EationAction,SleepAction{
    @Override
    public void sleep() {
        System.out.println("学生在睡觉");
    }

    @Override
    public void eat() {
        System.out.println("学生在吃饭");
    }
}
1
2
3
4
5
6
7
8
9
10
11
  • 测试
public class Test {
    public static void main(String[] args) {
        Student student = new Student();
        student.sleep();
        student.eat();
    }
}
1
2
3
4
5
6
7
上次更新: 2024/4/13