接口隔离原则定义

接口隔离有两种定义:

  • 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.
    类间的依赖关系应该建立在最小的接口上
    它要求是最小的接口,也是要求接口细化,接口纯洁。

我们把两种定义概括为一句话:建立单一接口,不要建立臃肿庞大的接口。再通俗的说就是接口尽量细化,同时接口中的方法尽量少。

那么什么是接口:
接口分为两类:

  • 实例接口(Object Interface)
    在java中声明一个类,类也是一种接口。
  • 类接口(Class Interface)
    java中经常使用Interface来定义。

接口隔离原则与单一职责原则区别

接口隔离原则与单一职责原则的审视角度不相同。单一职责原则要求是类和接口的职责单一,注重的昌职责,这是业务逻辑上的划分。接口隔离原则要求接口的方法尽量少。

接口隔离原则的应用

我们可以实现一个星探找美女的过程:
uml类图如下:

美女, 我们一般观点认为美女要有好的面孔,好的身材,好的脾气。好吧,那么我们定义一下一个美女接口,有好的面孔,好的身材和好的脾气:

美女接口:

public interface IPettyGirl{//要有好的面孔public void goodLooking();//要有好身材public void niceFigure();//要有好气质public void goodTemperament();
}

然后,我们实现一个具体的美女类:

美女实现类:

public class PettyGirl implements IPettyGirl{private String name;public PettyGirl(String name){this.name = name;}public void goodLooking(){System.out.println(name + "---有好的面孔");}public void niceFigure(){System.out.println(name + "---有好身材");}public void goodTemperament(){System.out.println(name + "---有好气质");}
}

美女类已经实现,现在我们定义一个抽象星探类:

抽象星探类:

public abstract class AbstractSearcher{protected IPettyGirl pettyGirl;public AbstractSearcher(IPettyGirl pettyGirl){this.pettyGirl=pettyGirl;}//显示美女信息public abstract void show();
}

然后再实现一个具体星探类:

星探具体实现类:

public class Searcher extends AbstractSearcher{public Searcher(IPettyGirl pettyGirl){super(pettyGirl);}//显示美女信息public void show(){System.out.println("----美女的信息如下:---");//显示好的面孔super.pettyGirl.goodLooking();//显示好身材super.pettyGirl.niceFigure();//显示好气质super.pettyGirl.goodTemperament();}
}

然后,在一个场景类中,实现一个星探找美女的过程:

Client类:

public class Client{public static void main(Strings[] args){//定义一个美女IPettyGirl xiaoHong = new PettyGirl("小红");AbstractSearcher searcher = new Searcher(xiaoHong );searcher.show();}}

然而,随着时代变化,人们的审美观点都在变化,美女的定义也在变化。人们也会把面容一般,身材一般,但是脾气特别好的女孩定义为美女,如气质美女。但是,我们定义的美女接口中规定是美女要具备三个条件,气质美女不是我们定义的美女。这个问题怎么办呢?

这是因此接口IPettyGirl设计有缺陷,它过于庞大,容纳了一些可变的因素,根据接口隔离原则,也就是接口应该尽量细化。我们把接口IPettyGirl拆分为二个接口,一个是外形美的美女IGoodBodyGirl,另一个是气质美的美女IGoodTemperamentGirl。这样,我们把一个比较臃肿的接口拆分为二个专门的接口,灵活性提高了,可维护性也增加了。

类图如下:

二种类型的美女定义:

public interface IGoodBodyGirl{//要有好的面孔public void goodLooking();//要有好身材public void niceFigure();
}
public interface IGoodTemperamentGirl{//要有好气质public void goodTemperament();
}

最标准的美女:

public class PettyGirl implements IGoodBodyGirl, IGoodTemperamentGirl{private String name;public PettyGirl(String name){this.name = name;}public void goodLooking(){System.out.println(name + "---有好的面孔");}public void niceFigure(){System.out.println(name + "---有好身材");}public void goodTemperament(){System.out.println(name + "---有好气质");}
}

保证接口的纯洁性

接口隔离原则是对接口进行规范约束:

接口要尽量小

这是接口隔离原则的核心定义,接口要尽量小,不要出现臃肿的接口,但是小也是有限度的,不能违背单一职责原则。

接口要高内聚

高内聚就是提高接口,类,模块的处理能力,减少对外的交互。具体到接口隔离原则就是要求在接口中尽量减少公布public方法,接口是对外的承诺,承诺越少对系统开发越有利,变更的风险就越少。

接口设计是有限度的

接口的设计粒度越小,系统越灵活。但是灵活的同时也带来了结构复杂,开发难度大,可维护性降低。所以接口设计是注意度。

接口隔离原则开发经验

接口隔离原则是对接口的定义,同时也是对类的定义,接口和类尽量使用原子接口或原子类来组装。我们在实践中可以以下几个规则来衡量:

  • 一个接口只服务于一个子模块或业务逻辑
  • 通过业务逻辑压缩接口中的public方法,接口要不断的精简,以达到接口不断完善
  • 已经被污染的接口,尽量去修改,若变更的风险较大,则采用适配器进行转化处理

六大设计原则之接口隔离原则相关推荐

  1. 七大设计原则之接口隔离原则应用

    目录 1 接口隔离原则介绍 2 接口隔离原则应用 1 接口隔离原则介绍 接口隔离原则(Interface Segregation Principle, ISP)是指用多个专门的接口,而不使用单一的总接 ...

  2. 面向对象的六大原则之 接口隔离原则——ISP

    ISP = Interface Segregation Principle ISP的定义如下: 1.客户端不应该依赖他不需要的接口 2.一个类对另外一个类的依赖性应该是建立在最小的接口上 3.不应当将 ...

  3. 软件设计原则之接口隔离原则、合成复用原则、迪米特原则

    系列文章目录 软件设计原则之单一职责原则.开闭原则 软件设计原则之里氏替换原则.依赖倒置原则 软件设计原则之接口隔离原则.合成复用原则.迪米特原则 文章目录 系列文章目录 一.接口隔离原则 什么是接口 ...

  4. 单一职责原则和接口隔离原则区别的理解

    网上对于两者的区别众说纷纭,总是一套理论下来跟没有说一样,下面说说自己的理解:  单一职责原则: 是将某一职责的方法全放在一个接口中,这时候就会出现实现该接口的类必须实现该接口中自己用不到的方法(违背 ...

  5. 面向对象编程原则(07)——接口隔离原则

    版权声明 本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl 参考资料 <大话设计模式> 作者:程杰 <Java设计模式> 作者:刘 ...

  6. 软件设计模式六大原则之四接口隔离原则(PHP语言实现)

    转载,原文链接https://www.cnblogs.com/zhanghengscnc/p/8299459.html 定义:客户端不应该依赖它不需要的接口:一个类对另一个类的依赖应该建立在最小的接口 ...

  7. 6大设计原则之接口隔离原则

    接口隔离原则的定义 什么是接口. 实例接口,比如定义了一个Person类,然后 Person p = new Pserson(); 产生一个实例,Person类就是 p 的接口 类接口,就是Java中 ...

  8. 面向对象设计原则之接口隔离原则

    接口隔离原则定义如下: 接口隔离原则(Interface  Segregation Principle, ISP):使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口. 根 ...

  9. 【软件架构设计原则】单一职责原则和接口隔离原则

    文章目录 软件架构设计原则 单一职责原则 接口隔离原则 其他设计原则 软件架构设计原则 本文通过实例来讲解 单一职责原则 接口隔离原则 单一职责原则 单一职责(Simple Responsibilit ...

最新文章

  1. TechED 2005 博客园兄弟合影
  2. php access control allow origin,js请求跨域问题--Access-Control-Allow-Origin
  3. [Issue Fixed]-不能为虚拟电脑xxx打开一个新任务
  4. 北京内推 | ​阿里达摩院智能计算实验室认知智能组招收多模态算法实习生
  5. 通用计算机系统的工作方式,通用计算机操作系统典型体系结构综述
  6. 技术解析:一文看懂 Anolis OS 国密生态 | 龙蜥专场
  7. 理解R-CNN、SPP-NET、Fast R-CNN、Faster R-CNN、FPN博文整理
  8. java中二叉树_Java工程师面试1000题224-递归非递归实现二叉树前、中、后序遍历...
  9. 看我如何挖到 Dropbox Windows 版的这个 0day(微补丁发布)
  10. c++怎么确定一个整数有几位_《小数乘整数》说课稿
  11. ics计算机系统全称,ICS计算机系统实验--datalab实验
  12. java IO流:字节流、字符流
  13. Python爬虫:让“蜘蛛”帮我们工作
  14. 【刷题】BZOJ 2069 [POI2004]ZAW
  15. PMP-项目成本管理
  16. 【阿里巴巴】学习Java在面试过程中跳槽成功的心得总结
  17. php技术座右铭,100句激励自己的座右铭
  18. Java实战项目详细教程+文档+PPT+源码等]javaweb点餐系统全套|餐饮就餐订餐餐厅
  19. mt2503 Phonebook 开机初始化过程
  20. 《边缘云计算技术及标准化白皮书》

热门文章

  1. 【小贴士】合肥工业大学本科毕业答辩tips
  2. php mysql 站内消息_php如何开发网易云信消息抄送功能之聊天室消息保存到本地数据库...
  3. 电磁兼容(EMC)基础(二)
  4. scipy.misc.imresize的替换方案
  5. Python帮助文档的使用
  6. 专访:平安科技首席架构师金新明和他的程序人生
  7. 图神经网络(一)DGL框架搭建GCN图卷积神经网络模型
  8. NOR 与 NAND的区别对比分析
  9. 手机做了防抓包,如何抓包
  10. vimdiff 快捷键