点击上方“java大数据修炼之道”,选择“设为星标”

优质文章, 第一时间送达

来源 | https://www.cnblogs.com/three-fighter/p/12349725.html

什么是接口隔离原则?

接口隔离原则有两种定义:

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

这两个定义可以归纳为一个意思:建立单一接口,不要建立臃肿庞大的接口。也就是说,接口尽量细化,同时接口中的方法尽量少

接口隔离原则看起来似乎和单一职责原则撞一块了,但是:

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

  • 接口隔离原则要 求接口的方法尽量少,哪怕一个类或接口只有一个职责,但却有较多的方法,这再接口隔离原则中是不允许的。

为什么要用接口隔离原则?

以星探寻找美女为例:

不遵循接口隔离原则的设计

4-1:星探寻找美女类图

美女接口:

美女接口作了美女的定义。

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

美女实现类:

美女的具体要求。

public class PettyGirl implements IPettyGirl {private String name; //美女名字public PettyGirl(String _name){this.name=_name;}//脸蛋漂亮public void goodLooking() {System.out.println(this.name + "---脸蛋很漂亮!");}//气质要好public void greatTemperament() {System.out.println(this.name + "---气质非常好!");}//身材要好public void niceFigure() {System.out.println(this.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.greatTemperament();}}

场景类:

public class Client {//搜索并展示美女信息public static void main(String[] args) {//定义一个美女IPettyGirl yanYan = new PettyGirl("嫣嫣");AbstractSearcher searcher = new Searcher(yanYan);searcher.show();}
}

运行结果:

--------美女的信息如下:---------------
嫣嫣---脸蛋很漂亮!
嫣嫣---身材非常棒!
嫣嫣---气质非常好!

OK,这么一个选美的过程完成了。

但是仔细一想,这个接口的设计还是有问题的。这里选出的美女要容貌、身材、气质都很好。但是,如果容貌、气质都很好,身材稍逊就不算美女了吗?不然的话,怎么会有热辣型美女、气质型美女呢?IPettyGirl的设计明显是有缺陷的,过于庞大了,容纳了一些可变的因素。

遵循接口隔离原则的设计

根据接口隔离原则,重新设计。

将IPettyGirl接口拆分为两个接口,外观型美女IGoodBodyGirl,脸蛋和身材极棒;气质型美女IGreatTemperamentGirl,谈吐和修养都非常高。

4-2:修改后的星探寻找美女类图

两种类型的美女定义接口:

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

完美的美女接口:

public class PettyGirl implements IGoodBodyGirl,IGreatTemperamentGirl {private String name; //美女都有名字public PettyGirl(String _name){this.name=_name;}//脸蛋漂亮public void goodLooking() {System.out.println(this.name + "---脸蛋很漂亮!");}//气质要好public void greatTemperament() {System.out.println(this.name + "---气质非常好!");}//身材要好public void niceFigure() {System.out.println(this.name + "---身材非常棒!");}}

把一个臃肿的接口变更为两个独立的接口所依赖的原则就是接口隔离原则,让星探 AbstractSearcher依赖两个专用的接口比依赖一个综合的接口要灵活。接口是设计时对外 提供的契约,通过分散定义多个接口,可以预防未来变更的扩散,提高系统的灵活性和可维护性。

深究接口隔离原则

接口隔离原则是对接口进行规范约束,其包含以下4层含义:

  • 接口要尽量小

这是接口隔离原则的核心定义,不出现臃肿的接口(Fat Interface)。

但是,小是有限度的,根据接口隔离原则拆分接口时,首先必须满足单一职责原则。

  • 接口要高内聚

高内聚就是提高接口、类、模块的处理能力,减少对外的交互。

具体到接口隔离原则就是,要求在接口中尽量 少公布public方法,接口是对外的承诺,承诺越少对系统的开发越有利,变更的风险也就越 少,同时也有利于降低成本。

  • 定制服务

一个系统或系统内的模块之间必然会有耦合,有耦合就要有相互访问的接口(并不一定 就是Java中定义的Interface,也可能是一个类或单纯的数据交换),设计时就需要为各个访问者(即客户端)定制服务。

  • 接口设计是有限度的

接口的设计粒度越小,系统越灵活,这是不争的事实。但是,灵活的同时也带来了结构 的复杂化,开发难度增加,可维护性降低,这不是一个项目或产品所期望看到的,所以接口 设计一定要注意适度,这个“度”如何来判断呢?根据经验和常识判断,没有一个固化或可测 量的标准。

最近热文阅读:

1、单怼多线程,60道面试题,你能答上几个?(附答案)

2、Java Lambda表达式

3、String 也能做性能优化,我只能说牛逼!

4、超实用的18个Java8日期处理的实践!

5、用 float 存储金额,老板说损失从工资里扣!

6、这12张手绘图,让我彻底搞懂了微服务架构!

7、别用Date了,Java8新特性之日期处理,现在学会也不迟!

8、Java中当对象不再使用时,不赋值为null会导致什么后果 ?

9、SQL 查询总是先执行SELECT语句吗?你们都错了!

10、看完这篇Redis缓存三大问题,保你能和面试官互扯。

关注 java大数据修炼之道

每天学习java技术,你想学的Java知识这里都有!

微信扫描二维码,关注我的公众号

写留言

喜欢就给个“在看

【专题系列】设计模式—— 四:接口隔离原则相关推荐

  1. 深入浅出设计模式_深入浅出设计模式03接口隔离原则

    本文作者:开课吧寂然 图文编辑:开三金 大家好~,我是寂然~,本节课呢,我来给大家介绍设计模式原则之接口隔离原则. 话不多说,我们直接进入正题,老规矩,首先带大家了解一下接口隔离原则的官方定义,并作一 ...

  2. 设计模式:接口隔离原则

    定义 接口隔离原则(Interface Segregation Principle, ISP),定义为: Clients should not be forced to depend upon int ...

  3. 围观设计模式(4)--接口隔离原则(ISP,Interface Segregation Principle)

    接口隔离原则(英语:interface-segregation principles, 缩写:ISP)指明没有客户(client)应该被迫依赖于它不使用方法.接口隔离原则(ISP)拆分非常庞大臃肿的接 ...

  4. 【设计模式】接口隔离原则

    接口隔离原则 原则概述:客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上 如图中,[对象B]依赖[类D],[对象C]依赖[类E],但[类D]和[类E]都依赖于[接口A]. ...

  5. 设计模式之接口隔离原则

    接口隔离原则定义: 一个类对另一个类的依赖应该建立在最小的接口上,使得接口中的方法得到充分利用. uml图: 相关代码1: /*接口没有得到充分的利用,所以他违反了接口隔离原则. */public c ...

  6. 嘻哈说:设计模式之接口隔离原则

    1.定义 按照惯例,首先我们来看一下接口隔离原则的定义. 类间的依赖关系应该建立在最小的接口上. 接口中的方法应该尽量少,不要使接口过于臃肿,不要有很多不相关的逻辑方法. 有点类似于单一职责原则,都是 ...

  7. 设计原则(单一职责原则 开放封闭原则 里氏替换原则 依赖倒置原则 接口隔离原则 迪米特法则)

    设计原则 单一职责原则(SRP) 从三大特性角度看原则: 应用的设计模式: 开放封闭原则(OCP) 从三大特性角度看原则: 应用的设计模式: 里氏替换原则(LSP) 从三大特性角度看原则: 应用的设计 ...

  8. 设计模式系列(二)七大设计原则-----接口隔离原则

    七大设计原则之单一接口隔离原则 接口隔离原则 案例 应用实例 改进 上一篇:设计模式系列(一)七大设计原则-----单一职责原则 下一篇:设计模式系列(三)七大设计原则-----依赖倒转原则 接口隔离 ...

  9. 设计模式—— 四:接口隔离原则

    什么是接口隔离原则? 接口隔离原则有两种定义: Clients should not be forced to depend upon interfaces that they don't use.( ...

最新文章

  1. windows阿里云服务器配置
  2. python argv 详解_对python中的argv和argc使用详解
  3. 阿里云宣布进入 Serverless 容器时代,推出弹性容器实例服务 ECI
  4. python自动化测试框架pytest.pdf_Python 自动化测试框架 unittest 和 pytest 对比
  5. 细数你不得不知的容器安全工具
  6. 写给找工作的朋友——最典的面试葵花宝典
  7. Dom4j解析器_解析xml文档
  8. php mongo 类,mongo php类
  9. 说说emit(上)基本操作
  10. php文件开头加数据,在PHP中附加到文件的开头
  11. java font 字体 隶书_font-style字体设置
  12. springboot GeoLite2-City.mmdb实现通过IP地址获取经纬度以及该IP的所属地区
  13. 最新搜狗微信文章数据采集方法(无需代理)
  14. jpg转pdf怎么转换?
  15. 频繁默认网关不可用_电脑经常掉线提示默认网关不可用原因分析和解决办法
  16. 【CF724F】Uniformly Branched Trees 动态规划
  17. Docker学习笔记——Docker基础
  18. 【rust】part-7 self,crate,super、use,as
  19. TCP/IP入土指南
  20. 12个成功案例,告诉你提升客户体验新方法!

热门文章

  1. oracle创建用户密码和权限
  2. 智云影院V3.6.7缓存版源码
  3. PeekMessage完美解决MFC主界面无响应
  4. pascal_voc标注bbox的一些问题
  5. Windows API Watch Dog----看门狗(相互监视的两个进程)
  6. LInux下 /bin、/sbin、/usr/sbin、/usr/bin 目录的作用和区别
  7. 蓝桥杯—打印十字图—Java
  8. 对钢笔画的评价-我觉得适用于其他很多事情
  9. 怎么绘制室内空间的立面图?
  10. 明日之后各个地区战斗等级以及资源出产