我们一定要给自己提出这样的任务:第一,学习,第二是学习,第三还是学习。
学习从来无捷径,循序渐进登高峰。

目录

  • 一、基本介绍
  • 二、应用实例
    • 1、示例一
    • 2、示例二
  • 三、接口隔离原则

一、基本介绍

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

二、应用实例

类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类A和类B来说不是最小接口,则类B和类D必须去实现他们不需要的方法。

1、示例一

interface I {public void method1();public void method2();public void method3();public void method4();public void method5();
}class A{public void depend1(I i){i.method1();}public void depend2(I i){i.method2();}public void depend3(I i){i.method3();}
}class B implements I{public void method1() {System.out.println("类B实现接口I的方法1");}public void method2() {System.out.println("类B实现接口I的方法2");}public void method3() {System.out.println("类B实现接口I的方法3");}//对于类B来说,method4和method5不是必需的,但是由于接口A中有这两个方法,//所以在实现过程中即使这两个方法的方法体为空,也要将这两个没有作用的方法进行实现。public void method4() {}public void method5() {}
}class C{public void depend1(I i){i.method1();}public void depend2(I i){i.method4();}public void depend3(I i){i.method5();}
}class D implements I{public void method1() {System.out.println("类D实现接口I的方法1");}//对于类D来说,method2和method3不是必需的,但是由于接口A中有这两个方法,//所以在实现过程中即使这两个方法的方法体为空,也要将这两个没有作用的方法进行实现。public void method2() {}public void method3() {}public void method4() {System.out.println("类D实现接口I的方法4");}public void method5() {System.out.println("类D实现接口I的方法5");}
}public class Client{public static void main(String[] args){A a = new A();a.depend1(new B());a.depend2(new B());a.depend3(new B());C c = new C();c.depend1(new D());c.depend2(new D());c.depend3(new D());}
}

2、示例二

将臃肿的接口I拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系。

interface I1 {public void method1();
}interface I2 {public void method2();public void method3();
}interface I3 {public void method4();public void method5();
}class A{public void depend1(I1 i){i.method1();}public void depend2(I2 i){i.method2();}public void depend3(I2 i){i.method3();}
}class B implements I1, I2{public void method1() {System.out.println("类B实现接口I1的方法1");}public void method2() {System.out.println("类B实现接口I2的方法2");}public void method3() {System.out.println("类B实现接口I2的方法3");}
}class C{public void depend1(I1 i){i.method1();}public void depend2(I3 i){i.method4();}public void depend3(I3 i){i.method5();}
}class D implements I1, I3{public void method1() {System.out.println("类D实现接口I1的方法1");}public void method4() {System.out.println("类D实现接口I3的方法4");}public void method5() {System.out.println("类D实现接口I3的方法5");}
}

三、接口隔离原则

建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少。也就是说,我们要为各个类建立专用的接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。在程序设计中,依赖几个专用的接口要比依赖一个综合的接口更灵活。接口是设计时对外部设定的“契约”,通过分散定义多个接口,可以预防外来变更的扩散,提高系统的灵活性和可维护性。

Java设计原则——接口隔离原则相关推荐

  1. 【设计模式】软件设计七大原则 ( 接口隔离原则 | 代码示例 )

    文章目录 一.接口隔离原则简介 二.接口隔离原则代码示例 ( 反面示例 ) 1.接口定义 ( 接口臃肿 ) 2.实现类 1 3.实现类 2 三.接口隔离原则代码示例 ( 推荐用法 ) 1.接口 1 2 ...

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

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

  3. 六大设计原则-接口隔离原则

    1.开闭原则        2.接口隔离原则 3.依赖倒置原则 4.迪米特原则             5.里氏替换原则     6.单一职责原则 接口隔离原则 客户端不应该依赖它不需要的接口:一个类 ...

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

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

  5. Java七大设计原则 - 接口隔离原则

    一.什么是 接口隔离原则 (Interface Segregation Principle) ? 原则含义: 一个类对于另外一个类的依赖应该建立在最小的接口上 1. 接口隔离原则" 实际上它 ...

  6. 软件设计原则——接口隔离原则

    客户端不应该被迫依赖于它不使用的方法: 一个类对另一个类的依赖应该建立在最小的接口上. [例]安全门案例 我们需要创建一个黑马品牌的安全门,该安全门具有防火.防水.防盗的功能. 可以将防火,防水,防盗 ...

  7. 设计原则——接口隔离原则

    1.全称 Interface Segregation Principle 缩写为:ISP 2.解释 要求程序员尽量将臃肿庞大的接口拆分成更小的和更具体的接口,让接口中只包含客户感兴趣的方法 单一职责原 ...

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

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

  9. Java设计模式七大原则-接口隔离原则

    接口隔离原则(Interface Segregation Principle) 基本介绍 1) 客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上 2) 先看一张图: 类A ...

  10. 面向对象六大原则——接口隔离原则

    什么是接口隔离原则(Interface Segregation Principle, ISP)  接口对于Java开发者来说都不陌生,它几乎存在于每一个Java程序中,是抽象的代名词.在讲接口隔离原则 ...

最新文章

  1. 王道考研 计算机网络笔记 第五章:传输层
  2. Oracle-Oracle数据库结构
  3. LeetCode Best Time to Buy and Sell Stock II
  4. 皇牌空战无限服务器,《皇牌空战:无限》正式停服 一个搏击长空的时代终结[多图]...
  5. eShopOnContainers 知多少[7]:Basket microservice
  6. java 两个窗口 贴_粘贴子窗体中的多个记录时的子窗体校准错误
  7. springboot 自定义注解开发
  8. string和StringBuilder的选择
  9. jsp 使用base标签 没有作用_tag标签的概念,如何设置使用,它对网站seo优化有何作用...
  10. C++类的构造函数、析构函数与赋值函数
  11. mcp证书有什么用_初级会计职称有什么用?考下证书可以做什么工作?
  12. 在Ubuntu搭建网站环境问题记录
  13. 任务调度的合理性 (25 分)(拓扑排序)
  14. c#访问其他服务器的共享文件夹,C#实现访问网络共享文件夹
  15. ssh “Missing privilege separation directory: /run/sshd“
  16. hardfault常见原因_stm32 HardFault_Handler调试及问题查找方法
  17. 单位圆的面积为π,因此可以通过求单位圆面积的近似值来求π的近似值
  18. 第十一届蓝桥杯省赛:纪念日
  19. ClickHouse函数操作大全
  20. Linux从入门到入狱-01

热门文章

  1. MVCC的含义,如何实现的?
  2. 字符串里有加号,URLDecoder.decode解码出来是空格
  3. 全志V3S嵌入式驱动开发(uboot移植)
  4. mysql 注释解释详见
  5. 如何开始学习人工智能?人工智能入门教程
  6. Prescan C++仿真代码自动生成
  7. Java 泛型详解:泛型类、泛型接口和泛型方法
  8. Python 跳出循环
  9. ThinkPHP5在Nginx服务器下访问提示“重定向的次数过多”解决方法
  10. Linux修改root密码的两种方式