当前位置: 首页 > news >正文

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

文章目录

    • 3.4 接口隔离原则(ISP)
      • 3.4.1 概述
      • 3.4.2 案列

3.4 接口隔离原则(ISP)

接口隔离原则:Interface Segregation Principle,简称ISP

3.4.1 概述

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

3.4.2 案列

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

【例】安全门案例

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

在这里插入图片描述

// 防盗门
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();}
}

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

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

在这里插入图片描述

// 防盗接口
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();}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 网络安全宣传周 | DNS安全威胁与应对措施分享
  • Google提出 Speculative RAG:通过草稿机制增强检索增强生成
  • HTB-Vaccine(suid提权、sqlmap、john2zip)
  • ImDisk Toolkit将一部分RAM模拟成硬盘分区
  • 构建响应式 Web 应用:Vue.js 基础指南
  • Linux内核编程(十六)CAN总线驱动
  • Anolis OS 8.8 CentOS8离线安装mysql-8.0.9
  • Docker简介在Centos和Ubuntu环境下安装Docker
  • 医疗监测数据检测系统源码分享
  • Chrome和Chromium浏览器有什么不同?
  • 鸿蒙之Hello Word 遇坑总结 mac系统 不能预览 提示 Only files in a module can be previewed 解决办法
  • 第十一周:机器学习笔记
  • arcgisPro地理配准
  • 【鸿蒙OH-v5.0源码分析之 Linux Kernel 部分】007 - 一号内核线程 kernel_init线程 工作流程分析
  • SQL Server数据库简单的事务日志备份恢复
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 2017-09-12 前端日报
  • 4个实用的微服务测试策略
  • mysql 数据库四种事务隔离级别
  • TypeScript实现数据结构(一)栈,队列,链表
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 从tcpdump抓包看TCP/IP协议
  • 基于axios的vue插件,让http请求更简单
  • 利用DataURL技术在网页上显示图片
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 日剧·日综资源集合(建议收藏)
  • 如何编写一个可升级的智能合约
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 以太坊客户端Geth命令参数详解
  • 正则与JS中的正则
  • 白色的风信子
  • 《码出高效》学习笔记与书中错误记录
  • 说说我为什么看好Spring Cloud Alibaba
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • #define、const、typedef的差别
  • $jQuery 重写Alert样式方法
  • (11)MATLAB PCA+SVM 人脸识别
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (2015)JS ES6 必知的十个 特性
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (层次遍历)104. 二叉树的最大深度
  • (每日一问)设计模式:设计模式的原则与分类——如何提升代码质量?
  • (南京观海微电子)——I3C协议介绍
  • (实测可用)(3)Git的使用——RT Thread Stdio添加的软件包,github与gitee冲突造成无法上传文件到gitee
  • (万字长文)Spring的核心知识尽揽其中
  • (微服务实战)预付卡平台支付交易系统卡充值业务流程设计
  • (学习日记)2024.01.09
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .gitignore不生效的解决方案
  • .gitignore文件_Git:.gitignore
  • .net core开源商城系统源码,支持可视化布局小程序
  • .NET Framework 3.5安装教程
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • .net程序集学习心得
  • .NET运行机制