Java设计模式—面向对象设计原则(四) ----->接口隔离原则ISP (完整详解,附有代码+案例)

embedded/2024/12/22 9:02:12/

文章目录

3.4 接口隔离原则(ISP)

Interface Segregation Principle,简称ISP

3.4.1 概述

客户端测试类不应该被迫依赖于它不使用的方法;一个类对另一个类的依赖应该建立在最小的接口上。

3.4.2 案列

面看一个例子来理解接口隔离原则

【例】安全门案例

需求:创建一个学校品牌的安全门,该安全门具有防火、防水、防盗的功能。可以将防火,防水,防盗功能提取成一个接口,形成一套规范。类图如下:

在这里插入图片描述

java">// 防盗门
public interface SafetyDoor {//防盗功能public abstract void antiTheft();// 防火功能public abstract void fireproof();// 防水功能public abstract void waterproof();
}
==========================================================//学校防盗门类 实现防盗门接口public class SchoolDoor implements SafetyDoor {@Overridepublic void antiTheft() {System.out.println("防盗");}@Overridepublic void fireproof() {System.out.println("防火");}@Overridepublic void waterproof() {System.out.println("防水");}
}
============================================================public class ClientTest {public static void main(String[] args) {// 创建学校防盗门对象SchoolDoor schoolDoor = new SchoolDoor();// 调用方法实现防盗门的功能schoolDoor.antiTheft();schoolDoor.waterproof();schoolDoor.fireproof();}
}

上述代码看似实现了需求的功能,但是如果加入新增一个家庭品牌的安全门,有防盗功能和防火功能,此时如果再定义一个家庭安全门类去实现安全门的接口会造成家庭安全门被迫去实现防水功能,这就违背了接口隔离原则

根据接口隔离原则,改进如下:

在这里插入图片描述

java">// 防盗接口
public interface AntiTheft {public abstract void antiTheft();
}
===========================================================// 防火接口
public interface Fireproof {public abstract void fireproof();
}
===========================================================// 防水接口
public interface Waterproof {public abstract void waterproof();
}
==========================================================//创建学校防盗门,实现该有功能的接口
nmpublic class SchoolDoor implements AntiTheft,Fireproof,Waterproof{@Overridepublic void antiTheft() {System.out.println("防盗");}@Overridepublic void fireproof() {System.out.println("防火");}@Overridepublic void waterproof() {System.out.println("防水");}
}
=========================================================//新增家庭品牌安全门 实现该有功能的接口public class HomeDoor implements AntiTheft,Fireproof{@Overridepublic void antiTheft() {System.out.println("防盗");}@Overridepublic void fireproof() {System.out.println("防火");}
}
===========================================================public class ClientTest {public static void main(String[] args) {// 创建学校防盗门SchoolDoor s = new SchoolDoor();// 实现学校防盗门功能s.fireproof();s.waterproof();s.antiTheft();// 创建家庭品牌安全门HomeDoor homeDoor = new HomeDoor();//实现家庭品牌安全门的功能homeDoor.antiTheft();homeDoor.fireproof();}
}

http://www.ppmy.cn/embedded/111432.html

相关文章

CORS跨域详解

目录 前言 快速说明 详细解释 Access-Control-Allow-Origin Access-Control-Allow-Credentials Access-Control-Allow-Headers Access-Control-Expose-Headers Access-Control-Allow-Methods Access-Control-Max-Age 前言 假设你已经了解服务端处理CORS跨域问题时,会…

应用程序已被 Java 安全阻止:Java 安全中的添加的例外站点如何对所有用户生效

如题:应用程序已被 Java 安全阻止,如下图所示: 在寻找全局配置的时候花了一个上午的时间,到处搜解决方法,都不可行。最后还是参考官方的文档配置好了。如果你碰到了同样的问题,这篇文章一定可以帮到你。 环…

如何优化MySql的性能

优化MySQL的性能是一个复杂但至关重要的任务,它涉及到多个层面的调整和优化。以下是一些关键的步骤和策略,可以帮助你提高MySQL数据库的性能: 1. 优化数据库设计 选择合适的数据类型:确保你使用的数据类型是适合你的数据的&#…

视频笔记1

玩转apollo课程内讲解靠边启动场景_哔哩哔哩_bilibili 用open_space_roi_decider 改后 善用坐标点 如何不影响其它场景:if判断

Go语言现代web开发11 函数

函数是执行特定任务的程序的命名部分。我们通常编写函数是为了避免代码重复(通过将项目或包中重复的代码块移动到函数中)或使代码更具可读性(通过将执行特定任务的大量代码块移动到函数中)。在Go编程语言中,函数是用关键字func定义的。 参数是为获得结果而提供给函…

机器学习--卷积神经网络(包括python实现)

卷积神经网络 1. 计算方法 (1)输入和输出channel 1时 首先我们要知道channel是什么意思,顾名思义channel就是“通道”的意思qwq。我们来举个例子,在计算机视觉中,如果一张图片是黑白的,那么每个像素点都…

比 GPT-4 便宜 187 倍的Mistral 7B (非广告)

Mistral 7B 是一种设计用来快速处理较长文本的人工智能模型。它采用了一些特别的技术来提高速度和效率,比如“分组查询注意力(grouped-query attention)”和“滑动窗口注意力(sliding-window attention)”。 这些技术…

科技改变生活,IsMyLcdOK引领屏幕检测新风尚

科技之光,照亮繁忙的日常,让信息流通无阻,决策瞬间达成,助力我们在快节奏中精准协调,共创辉煌——而屏幕作为我们与数字世界交互的窗口,其质量直接关系到我们的使用体验。然而,随着液晶显示器的…