跳至主要內容

接口隔离原则

微信公众号:储凡2023/11/29大约 5 分钟

接口隔离原则

一个类对另一个类的依赖应该建立在最小的接口上。

要为各个类建立它们需要的专用接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。

一些要求:

  • 接口尽量小,但是要有限度。一个接口只服务于一个子模块或业务逻辑。
  • 为依赖接口的类定制服务。只提供调用者需要的方法,屏蔽不需要的方法。
  • 了解环境,拒绝盲从。每个项目或产品都有选定的环境因素,环境不同,接口拆分的标准就不同深入了解业务逻辑。
  • 提高内聚,减少对外交互。使接口用最少的方法去完成最多的事情。

举例说明

这里通过一个例子对接口隔离原则进行说明。例如:

定义两个接口:AnimalFlyable,分别表示动物和可飞行的对象。

然后,创建两个类:BirdDog

  • Bird 类实现了 AnimalFlyable 接口,表示一只鸟,具有吃和飞行的功能;
  • Dog 类实现了 Animal 接口,表示一只狗,只具有吃的功能。
/**
 * 接口隔离原则Demo
 */

interface Animal {
  eat: () => void
}

interface Flyable {
  fly: () => void
}

class Bird implements Animal, Flyable {
  public eat(): void {
    console.log('Bird is eating...')
  }

  public fly(): void {
    console.log('Bird is flying...')
  }
}

class Dog implements Animal {
  public eat(): void {
    console.log('Dog is eating...')
  }
}

// 使用示例
const bird = new Bird()
bird.eat()
bird.fly()

const dog = new Dog()
dog.eat()

通过这种设计,将吃和飞行的功能分别定义在不同的接口中,并由相应的类来实现,遵循了接口隔离原则。

这样的设计使得类的职责更加明确,客户端可以根据需要选择性地使用不同的类,提高了代码的灵活性和可复用性。

**接口隔离原则建议将臃肿的接口分解为更小、更具体的接口,以避免客户端依赖于它们不需要的接口成员。这样可以减少接口的复杂性,提高代码的灵活性和可复用性。 **

更新日志

2025/5/18 18:01
查看所有更新日志
  • 24657-feat: 基于@142vip/vuepress对站点升级,简化配置、优化整体结构 (#234)
  • c0f2d-refactor: 升级vuepress相关版本,优化项目结构 (#137)
  • 6b33b-feat(ES6): 新增2016新增特性和ts文档
  • e6a79-feat: 大幅新增设计模式、Linux命令、ORM框架教程文档