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

2023-11-03

一、什么是 接口隔离原则
(Interface Segregation Principle) ?

原则含义: 一个类对于另外一个类的依赖应该建立在最小的接口上       

 1. 接口隔离原则” 实际上它是建立在另一种设计原则之上(依赖倒置)的,即“面向接口编程,而 不是针对实现编程”  类之间的依赖不再是“真实类型“、而是 “表面类型” 。

2. “单一职责”原则要求类和接口职责单一,注重的是职责,是业务逻辑上的划分,
    “接口隔离”原则要求方法要尽可能的少,是在接口设计上的考虑。

注意接口隔离原则的辩证关系

接口设计的粒度越小,系统越灵活,这是不争的事实,但是灵活的同时也带来了结构的复杂化,开发难度的增加,可维护性降低。所以这个度要进行权衡。

看例子:

  interface A{
     //定义了4种行为
     void  aa();
	 void  ab();
	 void  ac();
	 void  ad();
  }
  
  class B implements A{ 
	 // 实际B只会实现 aa ab 
     void  aa();
	 void  ab();
	 void  ac();
	 void  ad();
  }
  
  Class C implements A{
  	 //实际C只会实现 ac ad
     void  aa();
	 void  ab();
	 void  ac();
	 void  ad();
  }
  
  public class School {

     public static void main(String[] args) {
	    A  bb = new B();
	    A  cc = new C(); 
		bb.aa();
		cc.ac();
   }
}

 看似没什么问题、实际上、问题很多

1、 调用异常:调用人不清楚 bb cc 是否都实现了内部的方法、从外面调用看都实现了(但是你却没实现 -- 还需要花人力成本去了解内部具体实现逻辑是否实现)、会造成调用错误 

2、 修改成本:C需要加一个行为功能、所以给 Interface A  添加接口、这样会造成B 也需要改动,

看似不需要实现、但是类多了之后、会造成小的改动需要修改很多类 - 设计明显不合理

  interface A{
     void  aa();
	 void  ab();
  }

  interface AL{
	 void  ac();
	 void  ad();
  }

  class B implements A{ 
     void  aa();
	 void  ab();
  }
  
  Class C implements AL{
	 void  ac();
	 void  ad();
  }
  
  public class School {

     public static void main(String[] args) {
	    A  bb = new B();
	    AL  cc = new C(); 
		bb.aa();
		cc.ac();
   }
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java七大设计原则 - 接口隔离原则 的相关文章

  • oracle单实例客户端连接的failover功能

    今天测试了一下单实例数据库客户端连接的failover功能 操作系统为red hat 5 5 root localhost cat etc issue Red Hat Enterprise Linux Server release 5 5
  • vue项目树状图的实现

    1 实现背景 项目需要直观的展示元素之间的关系 需要实现一个树状图 数据可视化可以用Echarts HighCharts 但是相关树状图的示例不够直观 且不美观 几种工具之间比较 选择了蚂蚁金服的G6来实现 在开发期间有树状图的示例 之后再
  • 快速排序基本思想及代码实现-史上最通俗易懂的

    来源 我是码农 转载请保留出处和链接 本文链接 http www 54manong com id 1236 1 算法思想 快速排序是C R A Hoare于1962年提出的一种划分交换排序 它采用了一种分治的策略 通常称其为分治法 Divi
  • MQTT遗愿(last will) paho.mqtt实现

    一 MQTT遗嘱 MQTT 可以设置遗嘱 客户端在连接Broker的时候将遗嘱内容 也是topic payload形式 遗嘱也有一个主题 发送给Broker并保存在Broker中 当客户端因为非正常原因断开与Broker的连接时 Broke
  • 进程的相概念(linux系统编程)

    什么是程序 什么是进程 有什么区别 程序是静态的概念 gcc xx x o pro 磁盘中生成的pro就是程序 进程是程序的一次运行活动 通俗的讲就是程序跑起来了 系统中就多了一个进程 在Linux里面怎么查看系统中有哪些进程 使用ps指令
  • linux的超级管理用户

    超级管理用户 也称为root用户 是Linux系统中最高权限用户 root用户具有完全控制系统的权限 可以执行任何操作 包括管理文件 修改配置 安装软件等 下面是root用户的用法大全 切换到root用户 在终端中输入以下命令 su roo
  • 青龙面板使用教程,以及安装

    1 青龙面板使用教程 以及安装 首先青龙面板是在docker里面的 我们要安装一个docker 我这里只有debian 11 安装的教程 如何在debian11上安装docker 知乎 这个文章不错了 按命令执行就好了 其他操作系统的 去网
  • K8S-11--prometheus--(监控基础/prometheus基础/grafana/promQL/exporter/cadvisor)

    一 监控基础 一 监控简介 监控模型 端监控 业务层监控 应用层监控 中间件监控 系统层监控 1 监控概述 web监控 打开速度 URL打开状态码 API接口可用性 业务监控 订单交易量 活跃用户量 支付量 中间件监控 数据库 redis
  • 跳出ping++退款的坑

    近期在项目的开发过程中 需要用到ping 的退款功能 由于使用的版本比官方提供的要低2个小版本 因此问题并不是很大 但是由于官方文档有些内容写的比较含蓄 因此遇到了一些问题 我们可以通过如下的方式来获取SDK的版本 gt gt gt imp
  • STM32开发环境配置相关问题记录

    1 编译时出现 error 35 error directive Please select first the target STM32F10x device used 解决方案 点选options for target 选择C C 在d

随机推荐

  • K8S deployment挂载

    Deployment部署文件 apiVersion apps v1 kind Deployment metadata annotations deployment kubernetes io revision 1 kubectl kuber
  • Spring Security认证成功后回跳(解决前后端分离下OAuth2认证成功回跳)

    前言 Spring Security 后面简称SS 用了很长时间了 但之前一直没注意到一个有趣的特性 直到最近弄前后端分离 在OAuth2提供者 github 认证后 需要跳回前端页面 前端页面和服务端不在同个域下 然后突然一般情况下 同域
  • 鸿蒙系统做服务器,鸿蒙升级第一夜服务器崩了,有人等到凌晨3点,称升级后内存变大...

    编 赵艳秋 6月2日晚间 华为宣布推出HarmonyOS 2 华为 百 款设备将陆续启动HarmonyOS 2升级 不少华为用户则经历了艰难的一夜 最大规模升级第一夜服务器崩了 有如五一小长假期间的在线购票系统12306 6月2日晚 因为太
  • 半径为r的均匀带电球体_放于真空中半径为R,带电量为q的均匀带电球体,求球内外各点电势分布...

    展开全部 当半径r 一个均匀带电的球壳 带电量为q 则e68a84e8a2ad62616964757a686964616f31333431353338对壳外部产生的场强为E q 4 r 内部场强为零 则以上均匀带电的球内半径为r处 电场强度
  • C语言删除字符串中某一指定字符

    include
  • Python数据挖掘和解析算法

    机器学习是计算机科学的一个分支 它利用过去的经验来学习并利用其知识来做出未来的决策 机器学习是计算机科学 工程和统计学的交叉点 机器学习的目标是概括一个可检测的模式或从给定的例子中创建一个未知的规则 机器学习领域的概述如下 监督学习 这是教
  • 11.3外汇黄金价格投资策略、期货原油最新价格布局及指导

    黄金消息面与技术面解析 消息面 周二 11月2日 国际金价持稳 在通胀压力不断增加以及对经济增长放缓的担忧之际 市场参与者等待美联储本周政策会议结果 美国物价和薪资涨幅正处于数十年来的高位 本周可能让美联储官员面临挑战 分析师预计 在央行收
  • STM32串口烧写程序

    STM32烧写注意 1 必须使用串口1烧写 2 烧写 BOOT0置1 BOOT1置0 运行 BOOT0置0 BOOT1置任意 3 使用FLYMCU烧写软件 4 NRST引脚电路设计成悬空 按键按下 拉低 步骤 1 买一根 TTL串口线分别把
  • 全国各省、市、区(sql语句)

    文章目录 一 省份 数据表 二 市 数据表 注意 因为到县sql语句太多文章限字数上传不全 所以一半放到了另外的一篇文章上 三 上部分区 县 数据表 四 中部分区 县 数据表 五 下部分区 县 数据表 六 在在下部分区 县 数据表 返回项目
  • 股票分析,利用线性回归实时预测股价,只需要提供股票代码即可爬取相应股票数据并建模

    这里参考了别人的代码 并引用了tushare模块中定义的接口自动获取了依据 股票代码来获取数据 此篇文章提供了 1 一个简单通过接口爬取csv数据的方法 2 一个处理csv数据的简单方法 3 依据数据进行特征提取建立简单的股价预测模型 如下
  • 关于Pygame运行无响应问题的办法(已解决)

    目录 pygame程序运行时需要初始化 在关闭运行页面的时候无响应 pygame程序运行时需要初始化 如下代码运行后无反应 import sys import pygame size width height 600 400 screen
  • 华为机试2016

    编程题 最高分是多少 老师想知道从某某同学当中 分数最高的是多少 现在请你编程模拟老师的询问 当然 老师有时候需要更新某位同学的成绩 输入描述 输入包括多组测试数据 每组输入第一行是两个正整数N和M 0 lt N lt 30000 0 lt
  • 1.5.1 AlexNet

    目录 五 AlexNet 5 1 ReLU 激活函数 5 2 局部响应正则化 5 3 数据增强 5 4 Dropout 5 5 网络整体架构 5 6 小结 五 AlexNet AlexNet 是 2012 年第 3届 ILSVRC Imag
  • 【postgresql 基础入门】创建数据库的方法,存储位置,决定自己的数据的访问用户和范围

    创建数据库 专栏内容 postgresql内核源码分析 手写数据库toadb 并发编程 开源贡献 toadb开源库 个人主页 我的主页 管理社区 开源数据库 座右铭 天行健 君子以自强不息 地势坤 君子以厚德载物 系列文章 入门准备 pos
  • Qt

    Qt QListWidgetItem返回错误的背景颜色 始终返回颜色值为0 问题解决 使用场景 程序使用QListWidget显示一个列表 这个列表具有点击选择和再次点击取消选择的功能 点击之后需要更换背景色以表示被选中 由于软件有主题效果
  • Js动态加载CSS样式文件的2种方法

    动态加载CSS文件 这个时常会用到 一般搞前端 我们最先想到的就是用JS来实现 的确 JS可以很方便的控制CSS样式表文件的动态插入 以下两种方法 使用 一 使用 这点采用了YUI插件中的一个方法 有效解决了各大浏览器的兼容性问题 主要是使
  • 面试经典(25)--二叉查找树(搜索树)

    二叉搜索树是经典的数据结构 本文来总结一下二叉搜索树的插入和删除算法 插入算法 struct Node int key struct Node parent struct Node left struct Node right struct
  • Elasticsearch实战(三)---复杂数据结构及映射 Mapping操作

    Elasticsearch实战 复杂数据结构及映射 Mapping操作 文章目录 Elasticsearch实战 复杂数据结构及映射 Mapping操作 1 ElasticSearch 映射操作 1 1 结构 1 2 映射 1 3 映射 显
  • CentOS8安装keepalived和lvs遇到的坑

    CentOS8 最小化安装 关闭selinux 两个负载yum 安装keepalived 和ipvsadm 一 没有配置ip forward lvs用DR模式不用 二 没有配置虚拟IP 只在keepalived配置中写的 前期是没有会配置虚
  • Java七大设计原则 - 接口隔离原则

    一 什么是 接口隔离原则 Interface Segregation Principle 原则含义 一个类对于另外一个类的依赖应该建立在最小的接口上 1 接口隔离原则 实际上它是建立在另一种设计原则之上 依赖倒置 的 即 面向接口编程 而