接口隔离原则(ISP)

接口隔离原则(ISP)

介绍

接口隔离原则(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();
}

这样,客户端就可以根据自己的需要选择实现它们所需要的接口。

特点

  1. 接口要尽可能地小,但是要满足单一职责原则。
  2. 接口之间应该是相互独立的,一个接口的修改不应该影响到另一个接口。

注意事项(*重点)

  1. 在设计接口时,要考虑到接口的使用者,尽量减少他们需要实现的方法。
  2. 如果一个接口已经存在,不要试图去修改它,应该尽量保持它的稳定性,新的接口应该被创建出来来满足新的需求。