Java 设计模式(十三) 接口隔离准则(ISP)
Java 设计模式(十三) 接口隔离原则(ISP)
接口隔离原则(Interface Segregation Principle)
ISP基本概念
接口
- 实例接口(Object Interface):一个类的实例对象是对一个类型的事物的描述,这时一种接口。
- 类接口(Class Interface):Java中interface关键定义的接口,也是我们通常理解的狭义的接口
ISP定义
-
客户端(模块)不应该依赖它不需要的接口(接口的纯粹性)
一个模块应该依赖它需要的接口,需要什么接口就提供什么接口,把不需要的接口剔除掉,那就需要对接口进行细化,保证接口的纯洁性
-
类间的依赖关系应该建立在最小的接口上
同样强调对接口的细化,那么接口作为抽象,在建立关系时才能保证纯洁性不会被无关的依赖破坏
保证接口纯洁性的规范
-
接口细化
在不违反单一职责原则(SRP)下,要对接口尽量细化,违背SRP会导致单个模块暴露太多方法(接口中的方法都是publi),很多单一职能的内部接口被暴露。
-
接口高内聚
- 高内聚:提高接口、类、模块的处理能力,减少对外的交互。
- 接口是对外的承诺,承诺越少对系统的开发越有利,变更的风险也更小,同时也有利于降低成本。
-
模块服务定制
为了减少模块间的耦合,可以对模块间的类似功能分别定制服务(不共用接口,而是使用专门的接口)
保证接口原子性的规范
- 一个接口只服务一个子模块或业务逻辑
- 通过优化业务逻辑压缩public方法
接口的粒度太小,会导致接口额数量剧增,对开发人员不友好;接口额粒度太大,灵活性降低,无法提供定制服务,给整体项目带来无法预估的风险。
例讲ISP
定义一个场景,也就是你找工作的时候,简历的筛选,人具有特异性,如果接口的粒度过大,会导致可能无法让A的技能完整呈现,或者不得不吹牛而保证自己所有的技能都被涉及(因为粒度不够细化),也可能分的接口细度过于大,填简历和写一本书一样的成本,那哪里还会有人来应聘,去卖书不好吗~就不实现了,完全没有任何代码难度…….