`
vking_wang
  • 浏览: 10029 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

六大设计原则总结:4)接口隔离原则 -Interface Segregation Principle

 
阅读更多

Interface Segregation Principle:

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.——类间的依赖关系应建立在最小的接口上。

即,接口尽量细化,接口中的方法尽量少


问题由来:

类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类A和类B来说不是最小接口,则类B和类D必须去实现他们不需要的方法


解决方案:

将臃肿的接口I拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系。包含4层含义:

1)接口要尽量小

不能出现Fat Interface;但是要有限度,首先不能违反单一职责原则(不能一个接口对应半个职责)。


2)接口要高内聚

在接口中尽量少公布public方法。

接口是对外的承诺,承诺越少对系统的开发越有利。


3)定制服务

只提供访问者需要的方法。例如,为管理员提供IComplexSearcher接口,为公网提供ISimpleSearcher接口。


4)接口的设计是有限度的


建议:

  • 一个接口只服务于一个子模块或业务逻辑;
  • 通过业务逻辑压缩接口中的public方法;
  • 已被污染了的接口,尽量去修改;若变更的风险较大,则采用适配器模式转化处理;
  • 拒绝盲从


与单一职责原则的区别:

二者审视角度不同;

单一职责原则要求的是类和接口职责单一,注重的是职责,这是业务逻辑上的划分;

接口隔离原则要求接口的方法尽量少。。。


分享到:
评论

相关推荐

    cis-3285-unit-13-interface-segregation-PJRubin:cis-3285-unit-13-interface-segregation-PJRubin由GitHub Classroom创建

    cis-3285-unit-13-interface-segregation-PJRubin:cis-3285-unit-13-interface-segregation-PJRubin由GitHub Classroom创建

    Interface Segregation Principle

    Robert Martin 的文章《ISP: The Interface Segregation Principle》。

    Java_面向对象设计原则总结

    3 接口分隔原则-Interface Segregation Principle (ISP) 4 单一职责原则-Single Responsibility Principle (SRP) 5 开闭原则-The Open-Closed Principle (OCP)   二 包的设计原则 6 重用发布等价原则-...

    IOS设计模式的六大设计原则之接口隔离原则(ISP,Interface Segregation Principle)-附件资源

    IOS设计模式的六大设计原则之接口隔离原则(ISP,Interface Segregation Principle)-附件资源

    24种设计模式C#版

    写代码的时候没处理好,启动文件,在简单工厂模式里 七大设计原则: 1、单一职责原则【SINGLE RESPONSIBILITY PRINCIPLE】:一个类负责一项职责....4、接口隔离原则【INTERFACE SEGREGATION PRINCIPLE】:建立单一接口

    深入理解JavaScript系列(21):S.O.L.I.D五大原则之接口隔离原则ISP详解

    本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第4篇,接口隔离原则ISP(The Interface Segregation Principle)。 英文原文:...

    JAVA六大原则代码.zip

    这个压缩文件包含了与JAVA编程相关的六大原则的实例代码。这些原则被称为SOLID原则,是Robert C. Martin等软件工程师提出的一组设计原则。...接口隔离原则(Interface Segregation Principle,ISP):不应该强迫一个

    24种设计模式介绍与6大设计原则

    4、接口隔离原则(Interface Segregation Principle) 这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。还是一个降低类之间的耦合度的意思,从这儿我们看出,其实设计模式就是一个软件的设计思想,从...

    面向对象的11个原则

    接口分离原则(The Interface Segregation Principle) 包的的设计原则 发布/重用等价原则(REP) 公共闭合原则(CCP) 共同重用原则(CRP) 非循环依赖原则(ADP) 稳定依赖原则(SDP) 稳定抽象原则(SAP)。

    OOD面试应对方法 SOLID原则.mp4

    应届生及亚马逊面试必考,IT求职必备基础。 S - Single-responsiblity principle 单一责任原则 ...I - Interface segregation principle 接口分离原则 D - Dependency Inversion Principle 依赖反转原则

    Geo-Segregation Analyzer:用于计算住宅隔离指数的开源软件-开源

    Geo-Segregation Analyzer 是在 GNU LGPL 许可下的开源软件。 该软件采用GeoTools库开发,可以1)读取ESRI Shapefiles(地理空间矢量数据格式); 2) 在一个或多个视图中可视化它们; 3) 并计算四十个住宅隔离指数。...

    Noisex-92噪声库及100种环境噪声库

    These nonspeech, environmental sounds can be used as nonspeech noises for evaluating speech segregation systems, among others. They are available in waveform, and can be downloaded in one ZIP file. ...

    PHP面向对象五大原则之接口隔离原则(ISP)详解

    本文实例讲述了PHP面向对象五大原则之接口隔离原则(ISP)。分享给大家供大家参考,具体如下: 设计应用程序的时候,如果一个模块包含多个子模块,那么我们应该小心对模块...接口隔离原则(Interface Segregation Prin

    Java23种基本的设计模式整料整理学习源码示例zip

    接口隔离原则(Interface Segregation Principle) 这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。还是一个降低类之间的耦合度的意思,从这儿我们看出,其实设计模式就是一个软件的设计思想,从大型...

    24个设计模式与6大设计原则

    26.4 接口隔离原则【INTERFACE SEGREGATION PRINCIPLE】 310 26.5 迪米特法则【LOW OF DEMETER】 320 26.6 开闭原则【OPEN CLOSE PRINCIPLE】 330 第 27 章 混编模式讲解 332 第 28 章 更新记录: 334 ...

    设计模式Demo

    4、接口隔离原则(Interface Segregation Principle) 这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。还是一个降低类之间的耦合度的意思,从这儿我们看出,其实设计模式就是一个软件的设计思想,从...

    Java 23种设计模式详解

    Java 全部23种设计模式全面详解 设计模式的六大原则 ...4、接口隔离原则(Interface Segregation Principle) 5、迪米特法则(最少知道原则)(Demeter Principle) 6、合成复用原则(Composite Reuse Principle)

    Java 设计模式

    4、接口隔离原则(Interface Segregation Principle)  使用多个隔离的借口来降低耦合度。 5、迪米特法则(最少知道原则)(Demeter Principle)  一个实体应当尽量少的与其他实体之间发生相互作用,使得系统...

    《Java设计模式(第2版)》

    4、接口隔离原则(Interface Segregation Principle) 使用多个隔离的借口来降低耦合度。 5、迪米特法则(最少知道原则)(Demeter Principle) 一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能...

Global site tag (gtag.js) - Google Analytics