设计模式六原则 - 接口隔离原则

接口隔离原则(InterfaceSegregationPrinciple,ISP)

每一个接口承担独立的,较小,适当密度的功能,做好自己仅有的功能.

  • 接口就是一个类型所提供的所有方法特征集合的概率,接口的划分就是类型的划分。可以把接口理解成角色,一个接口只能代表一个角色,每个角色是一个特定的接口,这就叫“接口隔离原则”

  • 接口仅仅提供客户端需要的行为,客户端不需要的行为则隐藏起来,应当为客户端提供尽可能小的单独的接口,而不要提供大的总接口。

  • 单一职责原则原注重的是职责,而接口隔离原则注重对接口依赖的隔离。单一职责原则主要是约束类,其次才是接口和方法,它针对的是程序中的实现和细节,而接口隔离原则主要约束接口接口,主要针对抽象。

  • 为依赖接口的类定制服务,只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来。只有专注地为一个模块提供定制服务,才能建立最小的依赖关系。

问题

1
2
3
4
5
6
7
8
9
10
11
public interface UserDisplay {

void dataRead();

void transformTOXML();

void createChart();

void displayChart();

}

在实际实现接口中,可能难免避免有些是空方法,比如,本来就是一个XML文件,就没必要在去实现第二个方法。

重构

1
2
3
4
5
6
7
8
9
10
11
12
public interface DataHandler {
void dataRead();
}

public interface XMLHandler {
void transformTOXML();
}

public interface ChartHandler {
void createChart();
void displayChart();
}

其实很好理解:在使用接口隔离原则时,我们需要注意控制接口的粒度,接口不能太小,如果太小会导致系统中接口泛滥,不利于维护;接口也不能太大,太大的接口将违背接口隔离原则,灵活性较差,使用起来很不方便。一般而言,接口中仅包含为某一类用户定制的方法即可,不应该强迫客户依赖于那些它们不用的方法。

六大设计原则:

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器