[设计原则]接口隔离原则

接口分为两种:

  • 实例接口(Object Interface),在Java中声明一个类,然后用new关键词产生一个实例,它是对一个类型的事物的描述,这是一种接口,比如你定义Person这个类,然后使用Person zhangSan = new Person()产生了一个实例,这个实例要遵从的标准就是Person这个类,Person类就是zhangSan的接口,类也是一种接口
  • 类接口(Class Interface),Java中经常使用 interface关键词字义的接口。

接口隔离原则(ISP)的定义:

  • 客户端不应该依赖它不需要的接口。
  • 类间的依赖关系应该建立在最小的接口上。

建立单一接口,不要建立臃肿庞大的接口。接口尽量细化,同时接口中的方法尽量少。

接口隔离原则是对接口进行规范约束,其包含以下4层含义:

  • 接口要尽量小
    根据接口隔离原则拆分接口时,首先必须满足单一职责原则。
  • 接口要高内聚
    高内聚就是提高接口、类、模块的处理能力,减少对外的交互。要求在接口中尽量少公布public方法,接口是对外的承诺,承诺越少对系统的开发越有利,变更的风险也就越少,同时也有利于降低成本。
  • 定制服务
    一个系统或系统内的模块之间必然会有耦合,有耦合就要有相互访问的接口(并不一定就是Java中定义的Interface,也可能是一个类或单纯的数据交换),我们设计时就需要为各个访问者定制服务。定制服务就是单独为一个个体提供优良的服务。我们在做系统设计时也需要考虑对系统之间或模块之间的接口采用定制服务。采用定制服务就必然要有一个要求:只提供给访问者需要的方法。
  • 接口设计是有限度的
    接口的设计粒度越小,系统越灵活,这是不争的事实。但是,灵活的同时也带来了结构的复杂化,开发难度增加,可维护性降低。所以接口设计一定要注意适度。

接口隔离原则是对接口的定义,同时也是对类的定义,接口和类尽量使用原子接口或原子类来组装。但是,这个原子该怎么划分是设计模式中的一大难题,在实践中可以根据以下几个规则来衡量:

  • 一个接口只服务于一个子模块或业务逻辑。
  • 通过业务逻辑压缩接口中的public方法,接口时常去回顾,尽量让接口达到最小。
  • 已经被们污染了的接口,尽量去修改,若变更的风险较大,则采用适配器模式进行转化处理。
  • 了解环境,拒绝肓从。每个项目或产品都有特定的环境因素,环境不同,接口拆分的标准就不同。

推荐阅读更多精彩内容