接口隔离原则(Interface Segregation Principle

devtools/2024/12/22 10:08:16/

接口隔离原则(Interface Segregation Principle)

基本介绍

  • 1)客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上
  • 2)先看一张图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 3)类 A 通过接口 Interface1 依赖类 B,类 C 通过接口 Interface1 依赖类 D,如果接口 Interface1 对于类 A 和类 C 来说不是最小接口,那么类 B 和类 D 必须去实现他们不需要的方法
  • 4)按隔离原则应当这样处理:将接口 Interface1 拆分为独立的几个接口,类 A 和类 C 分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则

应用实例

  • 1)类 A 通过接口 Interface1 依赖类 B,类 C 通过接口 Interface1 依赖类 D,请编写代码完成此应用实例
  • 2)看老师代码

[外链图片转存中…(img-mErgMQV5-1724209062710)]

interface Interface1 {void operation1();void operation2();void operation3();void operation4();void operation5();
}class B implements Interface1 {@Overridepublic void operation1() {System.out.println("B 实现了 operation1");}@Overridepublic void operation2() {System.out.println("B 实现了 operation2");}@Overridepublic void operation3() {System.out.println("B 实现了 operation3");}@Overridepublic void operation4() {System.out.println("B 实现了 operation4");}@Overridepublic void operation5() {System.out.println("B 实现了 operation5");}
}class D implements Interface1 {@Overridepublic void operation1() {System.out.println("D 实现了 operation1");}@Overridepublic void operation2() {System.out.println("D 实现了 operation2");}@Overridepublic void operation3() {System.out.println("D 实现了 operation3");}@Overridepublic void operation4() {System.out.println("D 实现了 operation4");}@Overridepublic void operation5() {System.out.println("D 实现了 operation5");}
}/*** A类通过接口Interface1依赖(使用)B类,但是只会用到1,2,3方法*/
class A {public void depend1(Interface1 i) {i.operation1();}public void depend2(Interface1 i) {i.operation2();}public void depend3(Interface1 i) {i.operation3();}
}/*** C类通过接口Interface1依赖(使用)D类,但是只会用到1,4,5方法*/
class C {public void depend1(Interface1 i) {i.operation1();}public void depend4(Interface1 i) {i.operation4();}public void depend5(Interface1 i) {i.operation5();}
}

问题与改进

  • 1)类 A 通过接口 Interface1 依赖类 B,类 C 通过接口 Interface1 依赖类 D,如果接口 Interface1 对于类 A 和类 C 来说不是最小接口,那么类 B 和类 D 必须去实现他们不需要的方法
  • 2)将接口 Interface1 拆分为独立的几个接口,类 A 和类 C 分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则
  • 3)接口 Interface1 中出现的方法,根据实际情况拆分为三个接口
  • 4)代码实现

[外链图片转存中…(img-E4YNEkqM-1724209062712)]

interface Interface1 {void operation1();
}interface Interface2 {void operation2();void operation3();
}interface Interface3 {void operation4();void operation5();
}class B implements Interface1, Interface2 {@Overridepublic void operation1() {System.out.println("B 实现了 operation1");}@Overridepublic void operation2() {System.out.println("B 实现了 operation2");}@Overridepublic void operation3() {System.out.println("B 实现了 operation3");}
}class D implements Interface1, Interface3 {@Overridepublic void operation1() {System.out.println("D 实现了 operation1");}@Overridepublic void operation4() {System.out.println("D 实现了 operation4");}@Overridepublic void operation5() {System.out.println("D 实现了 operation5");}
}/*** A类通过接口Interface1,Interface2依赖(使用)B类,但是只会用到1,2,3方法*/
class A {public void depend1(Interface1 i) {i.operation1();}public void depend2(Interface2 i) {i.operation2();}public void depend3(Interface2 i) {i.operation3();}
}/*** C类通过接口Interface1,Interface3依赖(使用)D类,但是只会用到1,4,5方法*/
class C {public void depend1(Interface1 i) {i.operation1();}public void depend4(Interface3 i) {i.operation4();}public void depend5(Interface3 i) {i.operation5();}
}


http://www.ppmy.cn/devtools/99366.html

相关文章

空气净化器怎么选能除猫毛?宠物空气净化器除味好的分享

我有一位呼吸科医生朋友,他自己也养猫。他常向我们这群养宠物的朋友传授关于宠物毛发潜在危害的知识,引来不少幽默的回应:“既然如此,干脆把猫送走算了?”开玩笑,自己养大的猫跟亲生的有什么区别。我注意到…

vue 2.0 对应vuex的commit用法

在 Vue.js 2.0 中,commit 方法通常与 Vuex(Vue 的状态管理模式 库)一起使用,用于触发 mutation(更改 Vuex store 中的状态的唯一方法)。Vuex 是 Vue.js 应用程序的状态管理模式和库,它集中式存…

npm install报错解决记录

npm install报错解决记录 在前端开发和Node.js项目中,npm install 是我们日常工作中频繁使用的命令之一,它用于安装项目所需的依赖包。然而,在实际操作中,我们经常会遇到各种各样的错误,这些错误可能源于网络问题、np…

前端视角解决chrome/firefox浏览器访问国家税务局发票查验平台验证码获取提示”网络异常,请稍后再试“解决方法

目录 问题描述问题原因解决办法 问题描述 chrome等浏览器访问国家税务局发票查验平台时获取验证码提示”网络异常,请稍后再试“,安装根证书、信任根证书也无效 问题原因 使用开发者工具查看执行过程,点击获取验证码后ajax请求地方税务局的…

【0317】Postgres内核之VACUUM (FULL)通用 utility function invoker (12)

1. utility function invoker ProcessUtility()函数是“通用实用函数调用器(general utility function invoker)”。该函数原型如下: void ProcessUtility(PlannedStmt *pstmt,const char *queryString,ProcessUtilityContext context,ParamListInfo params,QueryEnvironm…

深入探讨量子计算领域的最新进展及其对社会经济的影响

一、引言 在21世纪的科技浪潮中,量子计算作为一项颠覆性技术,正逐步从理论走向实践,成为各国竞相争夺的科技制高点。量子计算利用量子力学原理,实现了对传统计算模式的根本性变革,其强大的并行处理能力和指数级增长的…

c++自定义迭代器,如跳表,怎么实现

在C中&#xff0c;跳表是一种高效的数据结构&#xff0c;用于存储有序数据并支持快速查找、插入和删除操作。为了在C类中实现跳表迭代器&#xff0c;你需要定义一个迭代器类&#xff0c;并在跳表类中提供相应的接口。以下是一个简单的实现示例&#xff1a; #include <iostr…

RACE数据集

RACE&#xff08;Reading Comprehension from Examinations&#xff09;数据集是一个著名的机器阅读理解数据集&#xff0c;由大规模的英语阅读理解题目构成&#xff0c;专门用于训练和评估机器阅读理解能力。RACE 数据集的题目来源于中国的中学生英语考试&#xff0c;分为 RAC…