目录

  • 一、接口隔离原则
  • 二、模拟场景
  • 三、违背原则方案
    • 1、程序员的职责接口
    • 2、项目经理
    • 3、开发人员
    • 4、测试人员
  • 四、接口隔离原则概述代码
    • 1、设计接口
    • 2、开发接口
    • 3、测试接口
    • 4、运维接口
    • 5、项目经理
    • 6、开发人员
    • 7、测试人员

一、接口隔离原则

客户端不应该依赖它不需要的接口,一个类对另一个类的依赖应该建立在最小的接口上。

接口隔离原则要求程序员尽量将臃肿庞大的接口拆分成更小的和更具体的接口,让接口中只包含客户感兴趣的方法

接口隔离是为了高内聚、低耦合。在实际的业务开发中,通常会先定义好需要开发的接口,并由各个实现类实现。但如果没有经过考虑和设计,就很可能造成一个接口中包含众多的接口方法,而这些接口并不一定在每一个类中都需要实现。这样的接口很难维护,也不易于扩展,每一次修改验证都有潜在的风险。

  1. 将臃肿庞大的接口分解为多个粒度小的接口,可以预防外来变更的扩散,提高系统的灵活性和可维护性。
  2. 接口隔离提高了系统的内聚性,减少了对外交互,降低了系统的耦合性。
  3. 使用多个专门的接口还能够体现对象的层次,因为可以通过接口的继承,实现对总接口的定义。
  4. 能减少项目工程中的代码冗余。过大的大接口里面通常放置许多不用的方法,当实现这个接口的时候,被迫设计冗余的代码。

二、模拟场景

通过模拟开发部经理、项目经理、员工之间的关系的例子来说明迪米特法则。

  1. 项目经理负责项目的设计、开发;
  2. 后端工程师负责项目的开发、测试、运维;
  3. 测试工程师负责项目的测试;

三、违背原则方案

我相信你一定写过类似的代码,看似设计感满满,面向接口编程,扩展性良好,结果一地鸡毛。

1、程序员的职责接口

package com.guor.beanutil.principle.isolation;/*** 程序员的职责*/
public interface Responsibility {// 设计void design();// 开发void develop();// 测试void test();// 运维void maintain();
}

2、项目经理

package com.guor.beanutil.principle.isolation;/*** 项目经理*/
public class ProjectManager implements Responsibility{@Overridepublic void design() {System.out.println("设计");}@Overridepublic void develop() {System.out.println("开发");}@Overridepublic void test() {// 无此职责的实现}@Overridepublic void maintain() {// 无此职责的实现}
}

3、开发人员

package com.guor.beanutil.principle.isolation;/*** 开发人员*/
public class Programmer implements Responsibility{@Overridepublic void design() {// 无此职责的实现}@Overridepublic void develop() {System.out.println("开发");}@Overridepublic void test() {System.out.println("测试");}@Overridepublic void maintain() {System.out.println("运维");}
}

4、测试人员

package com.guor.beanutil.principle.isolation;/*** 测试人员*/
public class TestPerson implements Responsibility{@Overridepublic void design() {// 无此职责的实现}@Overridepublic void develop() {// 无此职责的实现}@Overridepublic void test() {System.out.println("我只负责测试, so easy");}@Overridepublic void maintain() {// 无此职责的实现}
}

四、接口隔离原则概述代码

接口隔离原则要求程序员尽量将臃肿庞大的接口拆分成更小的和更具体的接口,让接口中只包含客户感兴趣的方法

1、设计接口

package com.guor.beanutil.principle.isolation;/*** 设计*/
public interface DesignService {void design();
}

2、开发接口

package com.guor.beanutil.principle.isolation;/*** 开发*/
public interface DevelopService {// 开发void develop();
}

3、测试接口

package com.guor.beanutil.principle.isolation;/*** 测试*/
public interface TestService {// 测试void test();
}

4、运维接口

package com.guor.beanutil.principle.isolation;/*** 运维*/
public interface MaintainService {// 运维void maintain();
}

5、项目经理

package com.guor.beanutil.principle.isolation;/*** 项目经理*/
public class ProjectManager implements DesignService,DevelopService {@Overridepublic void design() {System.out.println("设计");}@Overridepublic void develop() {System.out.println("开发");}
}

6、开发人员

package com.guor.beanutil.principle.isolation;import com.guor.beanutil.principle.isolation2.Responsibility;/*** 开发人员*/
public class Programmer implements DevelopService,TestService,MaintainService{@Overridepublic void develop() {System.out.println("开发");}@Overridepublic void test() {System.out.println("测试");}@Overridepublic void maintain() {System.out.println("运维");}
}

7、测试人员

package com.guor.beanutil.principle.isolation;/*** 测试人员*/
public class TestPerson implements TestService {@Overridepublic void test() {System.out.println("我只负责测试, so easy");}
}

4个类秒变7个类,这设计靠谱吗?

现在看来管理人员、开发人员、测试人员都按需实现了各职责接口。不用再实现不必要的职责方法了,提高了代码的可靠性,降低开发成本和维护成本。

接口隔离原则虽然看似简单,但如果想在实际项目开发中,将各模块、功能规划的井井有条,运用的炉火纯青、恰到好处,真的很难。反复阅读,仔细体会。

设计模式系列文章:

java设计模式1,单一职责原则

java设计模式2,开闭原则

java设计模式3,里氏替换原则

java设计模式4,不要和陌生人说话

java设计模式5,接口隔离原则相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. 接口隔离原则——举例说明Java设计模式中的接口隔离原则

    举例说明Java设计模式中的接口隔离原则 一.举例说明 1.反例 (1)类图说明 (2)代码说明 (3)测试 (4)分析缺点(总结) 2.正例 (1)类图说明 (2)代码说明 (3)测试 (4)方案评 ...

  9. Java设计模式之设计的6大原则(开闭原则,里氏代换原则,依赖倒转原则,接口隔离原则,最少知道原则,合成复用原则)

    1. 开闭原则 核心思想:一个对象对外扩展开发,对修改关闭 意思就是:对类的改动是通过增加代码进行的,而不是修改现有的代码. 也就是说软件开发人员一旦写出了可以运行的代码,就不应该去改动它,而是要保证 ...

  10. java设计模式之设计原则④接口隔离原则

    定义: (1)用多个专门的接口,而不使用单一的总接口,客户端不应该依赖它不需要的接口. (2)一个类对一个类的依赖应该建立在最小的接口上. (3)建立单一接口,不要建立庞大臃肿的接口. (4)尽量细化 ...

最新文章

  1. Tableau实战系列浏览 Tableau 环境(六) -工作簿和工作表
  2. 算法与数据结构(python):快速排序
  3. js 和C# ashx之间数组参数传递问题
  4. 连接pgsql_Laravel 数据库连接配置和读写分离
  5. 程序员面试宝典 笔记 第七章
  6. 基本的 Python socket 模块
  7. python统计表中单词及其出现的次数 字典形式输出_Python统计文本词汇出现次数的实例代码...
  8. 主流影视网站8合一H5视频源码自动更新数据
  9. C++ 代码整洁之道
  10. 信号公式汇总之Z变换
  11. 使用邮件合并批量制作工资条并进行发送邮件
  12. Python3 插入排序
  13. android自定义六边形,Android实现六边形图像
  14. 英特尔 11 代酷睿桌面酷睿 i9-11900K登场
  15. 弦民谣吉他音源 Orange Tree Samples Evolution Steel Strings Kontakt
  16. SSH的 The authenticity of host xxx.xxx.xxx.xxx can't be established. 问题
  17. 低功耗基础——Lib文件中对ICG的描述
  18. 白山搜索引擎优化收费_白山SEO-白山网站优化-白山新站整站快速排名-【
  19. 两列布局(3种解决方案)
  20. 一念起,天涯咫尺;一念灭,咫尺天涯。—第八天

热门文章

  1. 附032.Kubernetes实现蓝绿发布
  2. 51单片机~红外通信工作原理
  3. 利用Python处理逐日气象数据集(.txt文件)
  4. 经典歌曲多版本欣赏:刘欢《情怨》:华夏元素鲜明的“中国风格“
  5. CSS3 background 与 渐变
  6. 计算机知识技能大赛总结,计算机技能大赛总结.doc
  7. python学习笔记六
  8. FPGAASIC开发流程
  9. 网桥 网卡网桥有什么区别
  10. java 大于或等于_java大于等于怎么表示