设计模式 - 浅谈接口隔离原则

接口隔离原则

原则说明:接口隔离原则(Interface Segregation Principle,ISP), 客户端不应该被迫依赖于它不使用的接口,或者说,类间的依赖关系应该建立在最小的接口上。

为什么要遵守该原则

该原则是为了让系统解开耦合,从而容易重构,更改和重新部署。

示例

假设我们有一个打印机接口,它有打印扫描复印三个方法

public interface Printer {
    void print();
    void scan();
    void copy();
}

现在我们有一个只支持打印的打印机类

public class SimplePrinter implements Printer {
    @Override
    public void print() {
        // 实现打印
    }

    @Override
    public void scan() {
        // 不支持扫描,但由于接口定义了这个方法,所以不得不实现
    }

    @Override
    public void copy() {
        // 不支持复印,但由于接口定义了这个方法,所以不得不实现
    }
}

这就违反了接口隔离原则,因为SimplePrinter被迫实现了它不需要的scancopy方法

正确的做法是:

public interface Printer {
    void print();
}

public interface Scanner {
    void scan();
}

public interface Copier {
    void copy();
}
public class SimplePrinter implements Printer {
    @Override
    public void print() {
        // 实现打印
    }
}

与单一职责的区别

回顾一下单一职责原则🔗就会发现,这两个特别像,那么区别是什么?

  1. 单一职责原则强调的是类和模块的职责划分。它要求一个类或者模块只负责一项职责,这样做的好处是当这项职责发生变化时,只需要修改这个类或模块,不会影响到其他的功能。
  2. 接口隔离原则则是从接口的角度来看待问题。它要求我们在设计接口时,应该尽量细化接口,让接口尽可能小。这样做的好处是降低了类之间的耦合度,提高了代码的灵活性。
  3. 单一职责原则主要是为了代码的可维护性,而接口隔离原则主要是为了代码的可复用性。

如何运用好接口隔离原则

  1. 接口尽量小,但是要有限度。对接口进行细化可以提高程序设计的灵活性,但是如果过小,则会造成接口数量剧增,使设计复杂化,因此一定要适度。
  2. 为依赖接口的类定制服务,只暴露调用类需要的方法,它不需要的方法则隐藏起来。只有专注为一个模块提供定制服务,才能建立最小的依赖关系。
  3. 提高内聚,减少对外交互,使接口用最少的方法完成最多的事情。
  4. 运用接口隔离原则,一定要适度,接口设计的过大或过小都不好。设计接口的时候,只有多花些实践去思考和筹划,才能准确地实践这一原则。

本文链接:

https://pugqq.com/archives/interface-isolation-principle.html
设计模式 - 浅谈接口隔离原则 - I/O
快来做第一个评论的人吧~

# 最近更新

Nginx的proxy_pass指令完全拆解2021-03-21

Nginx配置Jenkins域名访问2021-01-03

设计模式 - 浅谈备忘录模式2020-12-02

设计模式 - 浅谈中介者模式2020-11-23

设计模式 - 浅谈迭代器模式2020-11-02

MySQL5.7 字符集设置2020-10-26

设计模式 - 浅谈状态模式2020-10-23

设计模式 - 浅谈访问者模式2020-10-13

设计模式 - 浅谈观察者模式2020-10-12

设计模式 - 浅谈命令模式2020-09-21