ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] # 原则 在应用程序设计的时候,如果一个模块包含多个子模块,那么我们就应该小心的对该模块做出抽象 新模块加进来,如果要我们强迫实现所有接口方法,并且还要写一些哑方法.这样接口称为胖接口或者被污染的接口,使用这些接口会给系统引入一些不当的行为,这些不当的行为可能导致资源的浪费和不正确的结果 **接口隔离原则是指,客户端不应该被强迫实现一些他们不会使用的接口,应该把胖接口中的方法分组,用多个接口代替他,每个接口服务于一个子模块,就是使用多个专门的接口比使用单个接口要好的多** # ISP主要观点 ![](https://box.kancloud.cn/4083fbfc4d5e9e95b3209dc903f59b93_1287x217.png) ![](https://box.kancloud.cn/383ced8cf29919a9a6cd4febc3dcb055_935x99.png) **客户端程不应该依赖他不需要的接口方法(功能),那依赖什么? 依赖他所需要的接口,客户端需要什么接口就提供什么接口,把不需要的接口剔除,这就要求对接口进行细化,保证其纯洁性** 可以看出ISP和SRP在概念上是有一定的交叉的.事实上,很多设计模式在概念上都有交叉,甚至你很难判断一段代码是属于哪一个设计模式 **ISP强调的接口对客户端所作出的承诺越少越好,并且做到专一. 当某个客户程序要求发生变化,而迫使接口发生改变的时候,影响到其他客户程序的可能性小.这实际就是接口污染的问题** # 减少接口中的污染 ![](https://box.kancloud.cn/61f87df99483046ab04447b4d573c26c_871x670.png) **如果针对客户A的方法发生改变,客户B和客户C并不会受到任何影响.你可能会想,这样接口岂不是会很多? 这个问题问的好,接口既要拆,也不能拆的太细,这有个标准就是高内聚,接口应该具备一些基本的功能,能独立完成一个基本的任务** # 特有的方法如何实现? 根据ISP原则,这个方法可以在另一个接口的存在,让这个'异类'同时实现2个接口 对于接口的污染,可以考虑下面这2个处理方式 1. 利用委托分离接口 2. 利用多继承分离接口 委托模式中,有2个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理,如策略模式,代理模式等中都用到了委托概念