设计模式六大原则解读——什么是接口隔离
author:陈镇坤27
创建日期:2022年1月31日
一、接口隔离
1、接口隔离的定义
接口分两种:实例接口(对一个类型的事务性描述:new 某个实例);类接口(interface定义的接口)
隔离定义为:*Clients should not be forced to depend upon interfaces that they don’t use.*或
The dependency of one class to another one should depend on the smallest possible interface.
即不应该强制客户端去依赖它们不需要的接口
或
一个类对于另外一个类的依赖,应该建立在最小接口上。
简单来说,接口隔离要求保持类的纯洁性。
2、接口隔离的目的
提升系统的可维护性。
3、接口隔离与单一职责的区别
单一职责的划分角度是业务逻辑。同属一个业务逻辑的方法放在一个接口上。在模块调用时,对于不应该被某个不需要用到的模块而言,只能通过“文档”约束其调用行为。
接口隔离要求是对于模块内的接口,应该尽量做到不相干的方法不暴露方法,也就是尽量提供纯洁的接口给到模块调用。
4、 接口隔离的案例分析
侦探侦查美女,但对美女的定义有潜在发生变化的可能。
如果将具有多个特质的属性都放在美女接口类中,若仅仅通过扩展子类的形式去实现IPettyGirl接口,且无法满足IpettyGril所有的特质时,只能对对应的方法体进行置空,那么于AbstractSearcher而言,其审美的标准依然是IpettyGril接口定义的3个方法,不利于系统维护——当不需要某些特指时,侦探代码无法感知到变化发生。
正确的做法是提前预测业务的发展,按照接口隔离原则,进行接口方法的切分,让AbstractSearcher的依赖更灵活。
5、建议
拆分接口时,尽量要细粒度,但要以保证单一职责为前提。
接口要慎重对外公布public方法。
不同模块对同一接口业务的应用,按接口隔离原则拆分,防止出现业务冗余。(例如对外部系统和对内部系统,同一个接口的业务逻辑,在类接口上进行拆分,产生两个不同的表面类型接口)。
6、总结
接口既是对实例的定义,也是对interface的定义。按照接口隔离原则,从高层调用的角度出发,可以通过适配多个interface的方式来提升接口的纯洁性。