Java设计模式 | 七大原则之接口隔离原则

在这里插入图片描述

接口隔离原则(Interface Segregation Principle)

基本介绍

  1. 客户端不应该依赖他不需要的接口,即一个类对另一个类的依赖应建立在最小的接口上
  2. 如下图

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


应用实例

/*** Created with IntelliJ IDEA.* User: Mingda* Time: 2024/2/23 17:05* File: Segregation1* Description: 接口隔离原则*/
public class Segregation1 {public static void main(String[] args) {A a = new A();// A类通过接口去依赖B类a.method1(new B());a.method2(new B());a.method3(new B());C c = new C();// C类通过接口去依赖D类c.method1(new D());c.method4(new D());c.method5(new D());}
}// 接口
interface Interface1 {void operation1();void operation2();void operation3();void operation4();void operation5();
}// B类
class B implements Interface1 {public void operation1() {System.out.println("B operation1");}public void operation2() {System.out.println("B operation2");}public void operation3() {System.out.println("B operation3");}public void operation4() {System.out.println("B operation4");}public void operation5() {System.out.println("B operation5");}
}// D类
class D implements Interface1 {public void operation1() {System.out.println("D operation1");}public void operation2() {System.out.println("D operation2");}public void operation3() {System.out.println("D operation3");}public void operation4() {System.out.println("D operation4");}public void operation5() {System.out.println("D operation5");}
}/*** A类通过接口Interface1依赖(使用)B类,但是只会使用operation1()、operation2()、operation3()方法*/
class A {public void method1(Interface1 i) {i.operation1();}public void method2(Interface1 i) {i.operation2();}public void method3(Interface1 i) {i.operation3();}
}/*** C类通过接口Interface1依赖(使用)D类,但是只会使用operation1()、operation4()、operation5()方法*/
class C {public void method1(Interface1 i) {i.operation4();}public void method4(Interface1 i) {i.operation4();}public void method5(Interface1 i) {i.operation5();}
}
/*** Created with IntelliJ IDEA.* User: Mingda* Time: 2024/2/23 17:05* File: Segregation1* Description: 接口隔离原则*/
public class Segregation2 {public static void main(String[] args) {A a = new A();// A类通过接口去依赖B类a.method1(new B());a.method2(new B());a.method3(new B());C c = new C();// C类通过接口去依赖D类c.method1(new D());c.method4(new D());c.method5(new D());}
}// 接口1
interface Interface1 {void operation1();
}// 接口2
interface Interface2 {void operation2();void operation3();
}// 接口3
interface Interface3 {void operation4();void operation5();
}// B类
class B implements Interface1, Interface2 {public void operation1() {System.out.println("B operation1");}@Overridepublic void operation2() {System.out.println("B operation2");}@Overridepublic void operation3() {System.out.println("B operation3");}
}// D类
class D implements Interface1, Interface3 {public 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类,使用operation1()、operation2()、operation3()方法*/
class A {public void method1(Interface1 i) {i.operation1();}public void method2(Interface2 i) {i.operation2();}public void method3(Interface2 i) {i.operation3();}
}/*** C类通过接口Interface1、Interface3依赖(使用)D类,使用operation1()、operation4()、operation5()方法*/
class C {public void method1(Interface1 i) {i.operation1();}public void method4(Interface3 i) {i.operation4();}public void method5(Interface3 i) {i.operation5();}
}

github笔记

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/491905.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

免费分享一套SpringBoot+Vue实验室(预约)管理系统,帅呆了~~

大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue实验室(预约)管理系统 ,分享下哈。 项目视频演示 【免费】SpringBootVue实验室(预约)管理系统 Java毕业设计_哔哩哔哩_bilibili【免费】SpringBootVue实验室(预约)管理系统 Java毕…

Spring事务模板及afterCommit存在的坑

大家好,我是墨哥(隐墨星辰)。今天的内容来源于两个线上问题,主要和大家聊聊为什么支付系统中基本只使用事务模板方法,而不使用声明式事务Transaction注解,以及使用afterCommit()出现连接未按预期释放导致的…

云尚办公-0.3.0

5. controller层 import pers.beiluo.yunshangoffice.model.system.SysRole; import pers.beiluo.yunshangoffice.service.SysRoleService;import java.util.List;//RestController:1.该类是控制器;2.方法返回值会被写进响应报文的报文体,而…

matlab新能源汽车三自由度操纵稳定性分析及优化

1、内容简介 略 可以交流、咨询、答疑 55-新能源汽车三自由度操纵稳定性分析及优化 2、内容说明 略 摘 要 电动化是节能减排、寻求替代能源的最佳途径,已成为行业共识,论文基于江西科技学院桑塔纳轿车油改气项目,在拆除发动机、变速…

大数据可视化的设计规范,全面剖析,很实用。

大数据可视化的设计规范需要考虑到数据量大、复杂度高、数据类型多样等特点。以下是一份常见的大数据可视化设计规范,供您参考: 设计原则 简单易用:保证用户操作简单、直观,降低用户认知负担。数据准确:保证数据准确…

【LeetCode周赛】第 386 场周赛

目录 3046. 分割数组 简单3047. 求交集区域内的最大正方形面积 中等3048. 标记所有下标的最早秒数 I 中等 3046. 分割数组 简单 3046. 分割数组 分析: 查看数组内有没有重复超过2次的数即可。 代码: class Solution { public:bool isPossibleToSplit…

数据结构:链表的冒泡排序

法一:修改指针指向 //法二 void maopao_link(link_p H){if(HNULL){printf("头节点为空\n");return;}if(link_empty(H)){printf("链表为空\n");return;}link_p tailNULL;while(H->next->next!tail){link_p pH;link_p qH->next;while(q…

FPGA 与 数字电路的关系 - 这篇文章 将 持续 更新 :)

先说几个逻辑:(强调一下在这篇文章 输入路数 只有 1个或2个,输出只有1个,N个输入M个输出以后再说) 看下面的几个图: 图一( 忘了 这是 啥门,不是门吧 :)也就…

电商赠品数据可以监测吗

很多店铺为了引流,会在标题、图片上标明促销活动,常见的有赠品描述,由于现在监测价格技术的壁垒,其实很多时候,主图上的赠品信息因其描述方式、字体等的不同,会导致监测不出来的情况出现,这也给…

【数据库】MySQL视图 | 用户管理

文章目录 1 :peach:视图:peach:1.1 :apple:基本使用:apple:1.1.1 :lemon:创建视图:lemon:1.1.2 :lemon:案例:lemon:1.1.3 :lemon:删除视图:lemon: 1.2 :apple:视图规则和限制:apple: 2 :peach:用户管理:peach:2.1 :apple:用户信息:apple:2.2 :apple:创建用户:apple:2.3 :apple:…

SocketWeb实现小小聊天室

SocketWeb实现小小聊天室 消息推送的常见方式轮询长轮询SSE(server-sent event):服务器发送事件WebSocketWebSocket简介WebSocket API 实现小小聊天室实现流程消息格式客户端-->服务端服务端-->客户端 消息推送的常见方式 轮询 浏览器…

皓学IT:WEB05-Servlet

一、Servlet 1.1.概述 Servlet是SUN公司提供的一套规范,名称就叫Servlet规范,它也是JavaEE规范之一。我们可以像学习Java基础一样,通过API来学习Servlet。这里需要注意的是,在我们之前JDK的API中是没有Servlet规范的相关内容&am…