`
dawuafang
  • 浏览: 1107949 次
文章分类
社区版块
存档分类
最新评论

接口隔离原则的定义

 
阅读更多

接口隔离原则的定义

<wbr><wbr>在讲接口隔离原则之前,先明确一下我们的主角——接口。接口分为两种:<wbr><br><wbr><wbr><wbr><wbr><wbr><span><span>◇<wbr></wbr></span></span>实例接口(Object Interface),在Java中声明一个类,然后用new关键字产生的一个实例,它是对一个类型的事物的描述,这是一种接口,比如你定义Person这个类,然后使用Person zhangSan = new Person()产生了一个实例,这个实例要遵从的标准就是Person这个类,Person类就是zhangSan的接口,疑惑?看不懂?不要紧,那是因为让Java语言浸染的时间太长了,只要知道从这个角度来看,Java中的类也是一种接口;<wbr><br><wbr><wbr><wbr><wbr><wbr><span><span>◇<wbr></wbr></span></span>类接口(Class Interface),Java中经常使用的interface关键字定义的接口。<wbr><br><wbr><wbr><wbr>主角已经定义清楚了,那什么是隔离呢?它有两种定义,如下所示:<wbr><br><wbr><wbr><wbr><wbr><wbr><span><span>◇<wbr></wbr></span></span>“Clients should not be forced to depend upon interfaces that they don't use”——客户端不应该依赖它不需用的接口。<wbr><br><wbr><wbr><wbr><wbr><wbr><span><span>◇<wbr></wbr></span></span>“The dependency of one class to another one should depend on the smallest possible interface”——类间的依赖关系应该建立在最小的接口上。<wbr><br><wbr><wbr><wbr><wbr><wbr>新事物的定义一般都比较难理解,晦涩难懂是正常的。我们把这两个定义剖析一下,先说第一种定义:“客户端不应该依赖它不需要接口”,那依赖什么?依赖它需要的接口,客户端需要什么接口就提供什么接口,把不需要的接口剔除掉,那就需要对接口进行细化,保证其纯洁性;再看第二个定义:“类间的依赖关系应该建立在最小的接口上”,它要求是最小的接口,也是要求接口细化,接口纯洁,与第一个定义如出一辙,只是一个事物的两种不同描述。<wbr><br><wbr><wbr><wbr><wbr><wbr>我们可以把这两个定义概括为一句话:建立单一接口,不要建立臃肿庞大的接口。再通俗一点讲:接口尽量细化,同时接口中的方法尽量少。看到这里大家有可能要疑惑了,这与单一职责原则不是相同的吗?错,接口隔离原则与单一职责的审视角度是不相同的,单一职责要求的是类和接口职责单一,注重的是职责,这是业务逻辑上的划分,而接口隔离原则要求接口的方法尽量少。例如一个接口的职责可能包含10个方法,这10个方法都放在一个接口中,并且提供给多个模块访问,各个模块按照规定的权限来访问,在系统外通过文档约束“不使用的方法不要访问”,按照单一职责原则是允许的,按照接口隔离原则是不允许的,因为它要求“尽量使用多个专门的接口”,专门的接口指什么?就是指提供给每个模块都应该是单一接口,提供给几个模块就应该有几个接口,而不是建立一个庞大的臃肿的接口,容纳所有的客户端访问。<br><br><br><br><span style="color:#FF0000">《JAVA核心技术》上原话:接口不是类(204页,6.1节第一自然段),它是对类的一组需求的描述。<br> 第210页:JAVA的设计者选择了不支持多继承,因为多继承让语言本身变得非常复杂,效率也会降低。<br><br> 《EffectiveJava》:第82页:第18条:接口优于抽象类。<br> 两种机制的明显区别在于:抽象类允许包含某些方法的实现,但是接口不允许。另一个区别在于,实现抽象类的类处在继承层次中(这引起复杂),而实现接口的类不必在乎他所处的层次结构,并且可以实现多个接口。<br><br> 现有的类可以很容易被更新,以实现新的接口<br> 例如:<br> 假设你的Object是UFO,则<br> classMyObjectimplementsUFO....<br> 可以这样定义:<br> UFOanObject=newMyObject...<br> 如果你的MyObject变成飞机<br> classMyObjectimplementsPlane<br> 那么<br> PlaneanObject=newMyObject<br><br> 接口是混合类型的类项选择<br> 如上,这样定义<br> classMyObjectimplementsUFO,Plane....<br> 那么用instanceof来测试你的object是否是某个类型<br> 在这个基础上,有部分接口被定义成空接口,<br> 例如java.lang.Cloneable,很多是有仅仅是用instanceof来检测一个对象是否可以被克隆,因此它不包含方法签名。<br><br> 接口允许我们构造非层次结构的类型框架<br> 这个有点复杂,具体的你就看书吧!<br> 作者把接口和抽象类结合起来实现了一个抽象的骨架实现,打破了集成层次结构,<br> 并且以JAVA的集合框架为例说明了自己的构想</span><br></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
分享到:
评论

相关推荐

    JAVA设计模式六大原则详细讲解(面向对象语言通用)

    4.接口隔离原则: 客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。 5.迪米特法则还有一个更简单的定义:只与直接的朋友通信。其中,我们称出现成员变量、方法参数、方法返回值中的...

    程序设计六大原则及代码样例

    本文档非常详细的介绍了程序设计六大原则的定义,问题由来,解决方案及代码样例。

    C#面向对象设计的七大原则

    本文我们要谈的七大原则,即:单一职责,里氏替换,迪米特法则,依赖倒转,接口隔离,合成/聚合原则,开放-封闭 。 1. 开闭原则(Open-Closed Principle, OCP) 定义:软件实体应当对扩展开放,对修改关闭。这句话说...

    设计模式,软件开发者必读

    1.5.4 接口隔离原则(INTERFACE SEGREGATION PRINCIPLE, ISP) 9 1.5.5 合成/聚合复用原则(CARP) 9 1.5.6 迪米特法则(LAW OF DEMETER LOD) 10 1.5.7 单一职责原则(SIMPLE RESPONSIBILITY PINCIPLE SRP) 10 创建型模式 ...

    敏捷软件开发.pdf

    第12章 接口隔离原则(ISP) 12.1 接口污染 12.2 分离客户就是分离接口 12.3 接口隔离原则(ISP) 12.4 类接口与对象接口 12.5 ATM用户界面的例子 12.6 结论 参考文献 第III部分 薪水支付案例研究 第13章 ...

    java设计模式

    4.1 接口隔离原则的定义 4.2 美女何其多,观点各不同 4.3 保证接口的纯洁性 4.4 最佳实践 第5章 迪米特法则 5.1 迪米特法则的定义 5.2 我的知识你知道得越少越好 5.3 最佳实践 第6章 开闭原则 6.1 开闭原则的定义 ...

    go_design_patterns

    一个类有且仅有一个引起它变化的原因,否则这个类就需要分解依赖倒置原则:抽象不依赖于具象,具象依赖抽象理解:抽象类或父类不关心继承类的实现,但是继承类要实现抽象类的约定接口隔离原则:客户端不应该去依赖一...

    java版五子棋源码-DesignPattern:设计模式

    2.接口隔离原则 客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小接口上。分解成多个专门的接口,而不是使用单一的总接口 3.依赖倒转原则 高层模块不应该依赖低层模块,二者应该依赖抽象...

    AndroidDesignPattern:android原始设计模式-android

    5.接口隔离原则一种定义:客户端不应该依赖它不需要的接口;另一种定义:类之间的依赖关系应该建立在最小的接口之上。就是为了类之间的解耦。6.迪米特原则一个对象应该对其他要引用的对象有最少的了解。小结:在应用...

    1.什么是设计模式? 2.设计模式是指在软件开发中,经过验证的,用于解决在特定环境下、重复出现的、特定问题的解决方案 3.说出

    8.由于外部调用和内部实现被接口隔离开了,那么只要接口不变,内部实现的变化就不会影响到外部应用,从而使得系统更灵活,具有更好的扩展性和可维护性 9.什么是OOP?OOP有什么特性?使用OOP用什么好处? 10.oop 是...

    C++设计模式原理与实战视频课

    2-1 简单工厂方法的定义场景与实现-针对接口编程的设计思想剖析 2-2 简单工厂实用工程技术:C++对象动态创建技术与配置化开发 2-3 单例模式的定义场景与实现:懒汉、饿汉与多线程安全double checking 2-4 单例模式的...

    java简易投票系统源码下载-DesignModeDemo:23种设计模式swift实现

    4、接口隔离原则 使用多个隔离的接口,比使用单个接口要好 5、迪米特法则(最少知识原则) 一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。 6、合成复用原则 尽量使用合成/聚合的方式,...

    积分兑换系统java源码-DesignPattern:设计模式

    1.七种设计原则:开闭原则、依赖倒置原则、单一职责原则、接口隔离原则、迪米特原则、里氏替换原则、合成复用原则。 2.创建型设计模式:工厂方法、抽象工厂、建造者、单例常用,原型模式相对不常用。 3.结构型设计...

    cleanArchitecture01:使用扎实的原则与Node.js和Typescript清理代码

    我试图提取5条主要原则的最佳做法: S :单一责任O :开闭L :李斯科夫替代I :接口隔离D :依赖倒置Reference: 实体:类定义或具有其属性,属性和方法的模型。 提供者:是负责提供外部资源(例如数据库,电子邮件...

    关于EPLAN P8 2.2.5.6638的更新和安装说明书中文版(PDF)

    转换跳线和隔离端子的定义 同名分散式端子的分散式端子索引 新的母线定义 "EPLAN PLC & Bus Extension" 插件中的更新 在生成符号地址时考虑插头名称 更新的 PLC 配置系统数据交换接口 EPLAN Fluid专题 扩展的智能...

    微机原理及接口技术

    ·VI· 微机原理与接口技术 ·VI· 4.3.5 过程定义伪指令....................... 97 4.4 汇编语言程序的结构........................... 98 4.4.1 汇编语言程序的结构............... 98 4.4.2 程序正常返回DOS 的...

    eventos-javaee6:应用程序演示EJB事务的操作

    这是“单一职责” ,“封闭式” ,“ Liskov替换” ,“接口隔离”和“依赖倒置”的首字母缩写。 单一职责的标准非常简单,但在很大程度上被忽略了。 规则很简单:一个类必须只有一个理由,并且只有一个理由才能被...

    IS421Calc-C-

    控制台计算器马修·基顿(Matthew Keaton),基思·威廉姆斯(Keith Williams)教授目的该项目的目标是使计算器采用两个...” 接口隔离:“许多特定于客户端的接口比一个通用接口要好。” 依赖倒置:“依赖抽象而不是具

    clean-node-api

    隔离原理接口(ISP) 依赖倒置原则(DIP) 关注点分离(SOC) 不要重复自己(干) 你不会需要它(YAGNI) 保持简单,愚蠢(KISS) 继承而不是继承 小承诺 设计模式 工厂 适配器 合成的 装潢师 代理人 依赖...

    clean-flutter-app:使用TDD,Clean Architecture,设计模式和SOLID原理的Flutter应用程序

    隔离原理接口(ISP) 依赖倒置原则(DIP) 关注点分离(SOC) 不要重复自己(干) 你不会需要它(YAGNI) 保持简单,愚蠢(KISS) 命令查询职责隔离(CQRS) 继承而不是继承 小承诺 设计模式 工厂 适配器 ...

Global site tag (gtag.js) - Google Analytics