点击上方“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. java移位操作符注意的问题
  2. GDCM:DICOM转储到SQLITE3的测试程序
  3. php 统计目录大小,PHP 统计目录大小
  4. Java 设计模式 Day3 之面向抽象原则:什么是面向抽象编程?面向抽象编程如何应用?
  5. (维基百科LaTeX公式显示异常)解决方法
  6. rabbitMQ第四篇:远程调用
  7. 科技部领衔发布中国新一代AI发展报告:中美成全球AI网络核心节点
  8. 植物大战僵尸tv版显示无法连接服务器,创维云电视植物大战僵尸tv版总是无法连接服务器...
  9. ADS8332芯片驱动程序
  10. 中南OJ 2012年8月月赛 I题 Imagination
  11. 摸鱼刷题||听说打工和摸鱼更配
  12. devise rails
  13. 腾讯2018第一季度财报:微信用户超10亿,线下零售红利已到来
  14. 一文搞定B站弹幕生成云图
  15. 微软发布免费的文件恢复工具
  16. 4K修复经典老电影背后的科学
  17. 常见的网络安全攻击及防御技术概述
  18. 打开MyMPC的双字幕显示模式
  19. 论文、专利、文献检索及图像数据工具总结
  20. asp.net925-小型小说在线阅读网站系统

热门文章

  1. MinIO未授权SSRF漏洞(CVE-2021-21287)复现
  2. 蓝桥杯2017模拟赛-风险度量
  3. 与RTKLIB相关的文献低成本接收机智能手机相关
  4. Web UI自动化之Excel用例读取
  5. traceroute 命令使用方法详解
  6. [C#学习] BindingNavigator控件
  7. 狂补计算机基础知识,让我上了瘾
  8. cocos2d-x让win32响应键盘事件
  9. 安装jdk过程中报错1335缺少cda文件
  10. declare 命令