介绍
接口隔离原则(Interface Segregation Principle,ISP)是指使用多个专门的接口,而不是使用单一的总接口,客户端不应该依赖它不需要的接口。
原则
将一个大接口拆分成多个小接口,符合接口隔离原则,有利于降低类之间的耦合度,同时提高系统的灵活性和可维护性。
正反案例
反例
假设有一个图形界面系统,其中有一个界面类Gui
,它具有各种不同的功能,如图形绘制、键盘输入、鼠标输入等。如果将所有这些功能都放在一个接口中,即Gui
接口,那么不需要这些功能的客户端也必须实现它们,这违反了ISP
原则。
public interface Gui {
void draw();
void inputKeyboard();
void inputMouse();
}
正例
为了符合ISP
原则,可以将上面的Gui
接口拆分为多个小接口,分别代表不同的功能,如下所示:
public interface Drawable {
void draw();
}
public interface KeyboardInputable {
void inputKeyboard();
}
public interface MouseInputable {
void inputMouse();
}
这样,客户端就可以根据自己的需要选择实现它们所需要的接口。
特点
- 接口要尽可能地小,但是要满足单一职责原则。
- 接口之间应该是相互独立的,一个接口的修改不应该影响到另一个接口。
注意事项(*
重点)
- 在设计接口时,要考虑到接口的使用者,尽量减少他们需要实现的方法。
- 如果一个接口已经存在,不要试图去修改它,应该尽量保持它的稳定性,新的接口应该被创建出来来满足新的需求。