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

一、什么是耦合?

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

  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类类型其他类型皆不可的情形。

二、怎么实现低耦合?

实现低耦合就是对两类之间进行解耦,解除类之间的直接关系,将直接关系转换成间接关系,下面来提供两种解耦思路。
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的修改。

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

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

什么是耦合?解耦合的方法有哪几种?相关推荐

  1. Spring底层控制反转解耦合(IOC)

    简单的例子解释IOC控制反转进行解耦合 一.相关概念 (1)解耦合 解耦合就是把程序中互相不相关或有限相关的模块分割开来,把不同模块互相之间的关系用接口进行准确定义,解耦前,两个模块之间共享所有信息: ...

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

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

  3. 如何用解耦合提升开发效率?闲鱼团队有了新发现

    阿里妹导读:在业务开发的过程中,往往存在平台代码和业务代码耦合严重难以分离.业务和业务之间代码交织缺少拆解的现象.平台和业务代码交织导致不易修改,不同业务的代码交织增加了不同负责团队之间的协同成本.因 ...

  4. 架构整洁之道(三)-解耦合与复用

    一.为什么要解耦合 前面说到,好的架构是要花费最少的人力成本来构建和维护软件. 对应到写代码上,有两个关键点. 维护的时候,每次修改尽可能少的代码. 维护的时候,每次修改或者添加功能,工程师要少做决策 ...

  5. 存储计算解耦合,构建中国人英语语音数据库

    简介: 通过阿里云为流利说量身打造的数据湖解决方案,解决了流利说多种应用的各类数据的统一存储,帮助流利说构建数据规模高达上千亿的"中国人英语语音数据库". 公司介绍 流利说是世界领 ...

  6. 耦合(六种)与 内聚(七种)—《软件工程与计算》笔记

    耦合(六种)与 内聚(七种) 1. 耦合(六种) 耦合描述的是 两个模块 之间关系的复杂程度.耦合性越低越好,耦合度越高,模块划分越差,越不利于软件变更和复用.根据耦合性的高低依次分为以下六种耦合: ...

  7. 计算机耦合分类,耦合性 (计算机科学)

    关于与"耦合性 (计算机科学)"名称相近或相同的条目,请见"耦合". 耦合性(英语:Coupling,dependency,或称耦合力或耦合度)是一种软件度量, ...

  8. 直接法 matlab,解线性方程组直接方法matlab用法.doc

    解线性方程组直接方法matlab用法 在这章中我们要学习线性方程组的直接法,特别是适合用数学软件在计算机上求解的方法. 2.1 方程组的逆矩阵解法及其MATLAB程序 2.1.3 线性方程组有解的判定 ...

  9. PHP开发中常见的安全问题详解和解决方法

    PHP开发中常见的安全问题详解和解决方法 参考文章: (1)PHP开发中常见的安全问题详解和解决方法 (2)https://www.cnblogs.com/walblog/articles/83313 ...

  10. vue动态设置文字布局方式_详解Vue动态添加模板的几种方法

    动态添加模板需要收集原始数据的页面,这个时候我们需要很多原始数据收集模板,下面给大家详解Vue 动态添加模板的几种方法,希望对你学习这方面知识有所帮助. 通常我们会在组件里的 template 属性定 ...

最新文章

  1. c++把数组所有元素剔除_C语言基础之数组,第一节,C语言必学知识点剖析
  2. c枚举类型enum例题_一篇文章让你详细了解Java中Enum枚举类的使用
  3. 案例:验证用户名是否可用
  4. python3随笔-特征值,特征向量,逆矩阵
  5. linux 使用jstack_案例解析:线程池使用不当导致的系统崩溃
  6. python绘图turtle小猪_turtle作图:用turtle画一个小猪佩奇(详解!)
  7. 雷军:我40岁一事无成
  8. 野生前端的数据结构基础练习(6)——集合
  9. Skype for Business Server 2015-13-IISARR-2-发布-2-前端服务器
  10. vue中接收到后台数据再回显到输入框时无法修改
  11. atitit 课程表终生学习专业进修表从幼儿园到养老院 v2 r818.xlsx
  12. 项目过程管理(十七)结项
  13. jsp内置对象练习题
  14. 车辆运动学自行车模型
  15. 一次苦中作乐的追码过程(上)
  16. 七年级上册教材同步英语笔记
  17. 服务启动时,报Command line is too long异常
  18. java for循环 写法_java中for循环的6种写法
  19. ABP VNext学习日记20
  20. CSC与HPE企业服务合并后新名称公布:DXC Technology

热门文章

  1. 饭店点餐系统之系统工作流程
  2. 在家佛弟子对待工作的态度——世俗八正道
  3. 【论文精读】Stable Linear Structures and Seam Measurements for Parallax Image Stitching
  4. golang 获取map所有key的方式
  5. html页面获取map的值,vue获取map集合中的key、value值
  6. js获取map对象的key和value
  7. 你的六岁在玩儿泥巴,他们六岁已经在讲算法了
  8. 搜狗站长html标签验证,悦然建站分享:搜狗站长平台使用教程之添加网站
  9. 国内互联网大数据的发展现状和应用
  10. 海湾gst5000主机消防广播_海湾GST5000消防主机调试步骤