【035期】面试官问:什么是耦合?解耦合的方法有哪几种?

>>号外:关注“Java精选”公众号,回复“面试资料”,免费领取资料!“Java精选面试题”小程序,3000+ 道面试题在线刷,最新、最全 Java 面试题!

在项目的开发过程中,我们经常强调项目的代码模块尽量做到低耦合高内聚,但是什么是耦合?怎样做到低耦合?可能有很多人感到疑惑,下面我来跟大家讲解什么是耦合,怎么进行解耦合实现低耦合。

一、什么是耦合?

耦合指的就是两个类之间的联系的紧密程度,看下面这段代码:

  public class A{public int i;}public class B{public void put(A a){System.out.println(a.i);}}

上面这个例子中A类和B类之间存在一种强耦合关系,B类的put方法参数必须是A类类型,不可以是非A类类型。有强耦合关系当然也存在所谓的弱耦合关系,请看下面这段代码:

 public interface IBase{void say();}public class A implements IBase{@Overridepublic void say() {System.out.println("I am A");}}public class B implements IBase{@Overridepublic void say() {System.out.println("I am B");}}public class C{public void put(IBase base){base.say();}}

上面这段代码中C类与A类、B类之间就存在一种弱耦合关系,C类的put方法的参数可以使A类类型也可以是B类类型,不像强耦合关系中必须是A类类型其他类型皆不可的情形。

二、怎么实现低耦合?

实现低耦合就是对两类之间进行解耦,解除类之间的直接关系,将直接关系转换成间接关系,下面来提供两种解耦思路。“Java精选面试题”小程序,内涵3000+道面试题。

1、使用类的向上转型或接口回调的方式进行解耦

这两个方式其实都是一种思想,都是利用多态的思想,上面的弱耦合样例代码是接口回调的方式,下面展示利用类向上转型如何解耦:

public class Base{public void say(){System.out.println("I am Base");}}public class A extends Base{@Overridepublic void say() {System.out.println("I am A");}}public class B extends Base{@Overridepublic void say() {System.out.println("I am B");}}public class C{public void put(Base base){base.say();}}

看到这段代码是不是感觉跟上面的利用接口实现的弱耦合代码很相似,他们都是利用继承思想实现的多态性。

2、利用适配器模式进行解耦

所谓的强耦合不就是类之间存在着直接关系,从而使得他们俩联系特别紧密,那我在他们之间加一层,使直接关系变成间接关系,请看下面这段代码:

 public class A{public void aSay() {System.out.println("I am A");}}public class Base{public A a;public Base(A a){this.a=a;}public void baseSay(){a.aSay();}}public class B{public void put(Base base){base.baseSay();}}public static void main(String[] args){A a=new A();Base base=new Base(a);B b=new B();b.put(base);}

上面这段代码就是适配器模式进行解耦的代码例子,可能有人会很疑惑这样解耦有什么意义,以上代码只做演示确实看不出这种解耦的好处,但是在实际的项目开发过程中,如果有关A类的一些需求发生改变,我们可能只需要修改Base中的相关代码就可以进行整体需求的改变,否则的话,我们不仅要 修改A,还很有可能会导致B的修改。“Java精选面试题”小程序,内涵3000+道面试题。

解耦的本质就是将类之间的直接关系转换成间接关系,不管是类向上转型,接口回调还是适配器模式都是在类之间加了一层,将原来的直接关系变成间接关系,使得两类对中间层是强耦合,两类之间变成弱耦合关系。

以上纯属个人见解,如有不对欢迎各位大神指正。

作者:忽如一夜听春雨

blog.csdn.net/qq_24499615/article/details/77821896

往期精选  点击标题可跳转

【025期】谈谈 Java 中 synchronized 对象锁和类锁有什么区别?

【026期】面试官:说说双重检查加锁单例模式为什么两次校验?

【027期】面试必问 hashCode() 和 equals() 及使用规范,你掌握了吗?

【028期】Spring 面试题(2021最新版)赶紧收藏!

【029期】面试官:数据量很大的情况下,对于分页查询你有什么优化方案吗?

【030期】面试官问:MySQL发生死锁有哪些原因,怎么避免?

【031期】面试官问:为什么 StringBuilder 线程不是安全的?

【032期】2021年 Java 面试中 Linux 最高频的五个基本面试题

【033期】面试官问:说一说 Spring 中接口 bean 是如何注入的吗?

【034期】美团面试题:JVM 堆内存溢出后,其他线程是否可继续工作?

点个赞,就知道你“在看”!

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

国内 Android 手机典型勒索软件详情分析(附解锁方法)

事件说明 2017年2月13-17日,RSA Conference 2017 信息安全大会在美国旧金山Moscone中心隆重举行。大会第一天就是一系列关于Ransomware(勒索软件)的议题,而在刚刚过去的2016年,“MongDB数据库网络勒索事件”&#xff0…

Java后端入行看这 做软件园最靓的仔

16k长文以失败学角度分享普通本科二线Java后端入行经历 前言入行趣事■ 实习前■ 趣事分享1 —— 找实习■ 开启一周面试狂潮1、皮包单休公司2、养老级银行政务3、培训机构4、狼性外包公司5、教授带学生6、初创外包7、阿里旗下外包8、总结9、毕业后 ■ 趣事分享2 —— 给你加50…

QQ空间的汉字转拼音代码

html <!DOCTYPE html> <html lang"en" xmlns"http://www.w3.org/1999/xhtml"> <head><meta charset"utf-8" /><title>QQ空间的汉字转拼音代码</title><script id"jquery_183" type"text/…

android路由表位置,知乎上已获千赞,已拿到offer

前言 从2010年开始Android市场开始需要大量的Android开发人员&#xff0c;招聘市场上也开始大量招Android开发人员&#xff0c;大量java开发者开始学习Android开发&#xff0c;招聘市场面试要求上只要有一定java语法基础&#xff0c;都很容易应聘上Android开发的岗位&#xff…

FasterRunner安装教程(Windows版)

FasterRunner安装教程&#xff08;Windows版&#xff09; 原创 幼儿园二园长 发布于2019-05-10 17:02:59 阅读数 499 收藏 更新于2019-05-10 17:04:23 分类专栏&#xff1a; 接口 工具 版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&…

时间管理专题_软件篇02

本文属非商业用途&#xff0c;文中借鉴他人处均已注明出处&#xff0c;若侵犯原作权益&#xff0c;请联系删除&#xff0c;谢谢 接上一篇 时间管理专题_软件篇01 #NOTE要点:神文&#xff0c;从目标管理到时间统计完整流程&#xff0c;作者亲历 要点&#xff1a;此文过猛&…

为什么我强烈建议大家使用 Linux 开发?

点击上方“码农突围”&#xff0c;马上关注 这里是码农充电第一站&#xff0c;回复“666”&#xff0c;获取一份专属大礼包 真爱&#xff0c;请设置“星标”或点个“在看” 作者&#xff1a;夏日浅笑 cnblogs.com/summertime-wu/p/11140052.html Linux 能用吗&#xff1f; 我身…

微信Mac免费版:在Mac上也能浏览朋友圈、浏览相册和发布朋友圈

微信Mac版客户端全新功能升级&#xff01;&#xff01;不仅支持查看朋友圈&#xff0c;还能发布朋友圈啦&#xff01;&#xff01;&#xff01;微信正式版支持对朋友圈进行互动和点 赞等操作&#xff0c;还可以浏览朋友圈相册&#xff0c;这是一款运行在OS X上的 社交聊天工具&…

支持查看朋友圈的微信Mac版客户端

微信Mac版客户端终于支持查看朋友圈啦&#xff01;&#xff01;&#xff01;微信正式版支持对朋友圈进行互动和点 赞等操作&#xff0c;但目前仅限于浏览&#xff0c;这是一款运行在OS X上的 社交聊天工具&#xff0c;微信mac版支持跨通信运营商&#xff0c;跨操作系统平台通过…

电脑、手机软件推荐(多角度良心推荐)

本文从电脑和手机出发 推荐以下9大方向软件 1、杀毒软件 2、浏览器 3、聊天软件 4、视频软件 5、音乐软件 6、网盘软件 7、解压软件 8、购物软件 9、直播软件 为什么要推荐&#xff1f; 因为不想大家被流氓软件或者是低质量软件烦恼 1、杀毒软件 手机&#xff1a;推荐手机系…

【墨墨英语单词库免费开源无偿分享】小学、初中、高中、大学四六级专四专八、考研、托福、雅思等词书文本大合集

还在愁没有自己想要的词书&#xff1f;这不&#xff0c;我都给你准备好了&#xff1a; 纯英文txt源词库 带list分类txt词库大全 带中文释义excel词库 这些词书呢&#xff0c;是知乎上的一位大神用爬虫把墨墨背单词app的所有词库给爬取下来的&#xff0c; 而且无偿开源&…

华为手机助手安卓版_西瓜助手安卓版下载-西瓜助手app手机版下载v1.6.3[系统工具]...

西瓜助手安卓版是一款功能强大的手机系统工具软件。西瓜助手app官方版内置了海量在网络上热门的游戏语音包任用户免费使用,同时软件还支持应用多开。西瓜助手app支持手机运动步数修改、机型伪装、模拟语音等各种实用功能,工作、生活、娱乐等都很适用。 西瓜助手软件介绍 …

删库跑路 mini 版!程序员写代码给自己转账21 万!判了~

点击上方“Java精选”&#xff0c;选择“设为星标” 别问别人为什么&#xff0c;多问自己凭什么&#xff01; 下方有惊喜留言必回&#xff0c;有问必答&#xff01; 每天 08:15 更新文章&#xff0c;每天进步一点点... 要说这两年比较火的职业&#xff0c;程序员无疑是其中之一…

软件测试八股文整理

http和https的区别 https协议需要到CA&#xff08;Certificate Authority&#xff0c;证书颁发机构&#xff09;申请证书&#xff0c;一般免费证书较少&#xff0c;因而需要一定费用。http是超文本传输协议&#xff0c;信息是明文传输&#xff0c;https则是具有安全性的ssl加密…

Mac/iOS开发工程师 常用的软件 史上最全版

注意&#xff1a;长期更新&#xff0c;有“【任❤️何】”MAC软件需求(包括游戏、插件、图形设计、开发、系统、办公、网络等等)&#xff0c;留言或者私信或者加我微信&#xff0c;我会发给你破解版&#xff01;哥们不谈钱&#xff0c;伤肝&#xff01;全部免费发送&#xff01…

Linux下进程及其进程地址空间以及一些进程的控制函数

目录 什么是进程&#xff1f;进程的状态Linux下进程的状态 进程地址空间什么是进程地址空间为什么需要进程地址空间&#xff1f; 进程控制进程控制函数forkwait/waitpid 进程等待进程替换&#xff0c;进程替换函数exe 今天我们来分享一下Linux下的进程和进程地址空间以及一些进…

运维小白必学篇之基础篇第十一集:系统进程实验

系统进程实验 实验作业&#xff1a; 1、利用top命令查看当前系统进程&#xff0c;要求没5秒刷新一次&#xff0c;分别按照CPU使用率&#xff0c;内存使用量&#xff0c;CPU使用时间&#xff0c;PID分别排序一次 每5秒刷新一次&#xff1a;top -d 5 按照CPU使用率排序&#xf…

一个好用的不基于时间的同步文件的软件 —— Allway sync 文件同步

文件同步是协作同步的基础。 对于多文件修改后的同步备份,如果不是同步到网盘,那种有网盘软件帮助,识别修改后文件,并备份。容易出现备份出错&#xff0c;人就容易麻&#xff0c;麻中麻。 基本需求 对于文件的同步需求&#xff0c;如下&#xff1a; 识别更新后的文件&#…

android 时间同步软件,Network Time(时间同步软件)

Network Time(时间同步软件)是一款专业用以互联网技术多台计算机的系统时钟同步软件&#xff0c;运用Network Time可以完成服务器和局域网络的時间做到ms级的精确&#xff0c;有必须的可以下载应用。 【基础介绍】 Network Time是由 Han-soft发布的一款功能齐全的时间同步系统&…

时间同步软件和相关网站

网站 国家授时中心 http://www.time.ac.cn/stime.asp Time.is - 任何时区的精确时间 https://time.is/ 软件 时间精灵——WEB在线时间发布与校准Timefairy.exe 官网&#xff1a;http://www.time.ac.cn/times/timefairy.htm 下载&#xff1a;http://www.time.ac.cn/serve/down…