​只需1分钟,看完你就知道耦合什么意思 ?

只需1分钟,看完你就知道耦合什么意思 ?

概述

今天跟领导交流时谈了一下业务解耦的一些内容,而其中就谈到了为什么需要解耦?回答这个问题,我们必须得知道什么是解耦。相信大多数朋友都在软件工程中听过这样一句话 —— “高内聚,低耦合”。那么什么是 “高内聚”,什么是 “低耦合”呢?下面区分介绍一下。


01

什么是内聚

内聚,从字面上来看有聚精会神、聚在一起的意思,那么 高内聚也就是尽可能的使一个模块或一个类再或者是一个方法只专注做好一件事。

在设计软件的时候一定要采取【多聚合、少继承】的基本原则,因为使用 “聚合” 的这种方式能够使业务逻辑更加清晰,更有利于我们后期的扩展和维护。

例如订单模块,一般情况下,下单模块都会有如下的信息,订单的信息,产品的信息及谁下的单(买家信息)。这是基本的,那么设计的时候就要把相关的功能内聚到一起。当然这是从大功能(下单管理)上来说,当然这些模块还可以再细化分成产品、订单、会员等子模块。


02

耦合

耦合,从字面上来看有藕断丝连的意思,“耦” 这个字在中国汉语里指的是两个人在一起耕地,他俩各干各的互不影响,这也是“耦合”的由来。

那么 低耦合也就是尽可能的使每个模块之间或者每个类之间再或者是每个方法之间的关联关系减少,这样可以使各自尽可能的独立,一个地方出错,不会影响全部,更能提高代码的重用性。

所以在设计软件的时候也一定要注意各模块之间一定尽可能的减少联系,防止一个模块出现的问题影响到其他模块。

03

使用高内聚,低耦合的好处

1、生活中的 “高内聚,低耦合”

军队的存在是为了保家卫国,我们国家的军队分为海军、陆军、空军等部队,他们各自的职责是不一样的。海军负责海上作战,陆军负责陆地作战,空军负责空中作战,他们之间的联系很少。

我们可以想想为什么要这样安排呢?如果我们国家的军队不分的那么细,每支部队都有在海上、陆地、空中作战的士兵,如果我们和日本在海上大战,我们还需要从各个部队中抽取能够在海上作战的士兵,再组成一支海上抗日军这样的部队,抽取出来的士兵的战斗力各有不一,还需要一个适应的过程,我们想想这支一盘散沙的部队能取得胜利嘛?

打仗在于兵贵神速,这样的一支部队还是一盘散沙呢,怎么能做到兵贵神速呢?那么我们可以早早的就把他们分为海军、陆军、空军,海军就负责在海上作战,陆军就负责在陆地作战,空军就负责在空中作战,我们如果和日本进行海上大战,我们直接派海军过去不就可以了嘛?

根据我们刚才的分析,证明了军队分为海军、陆军、空军的好处,那么我们再想想,他们之间的联系为什么会很少呢?咱们还是假设一下,如果每个部队总是依赖其他几个部队,不会独立战斗,那么如果某一天海军被派出去执行任务,美国这个时候空军来袭,我们的空军难道要等海军回来再战斗嘛?如果那样的话为时晚矣。所以他们之间应该独立作战,互相依赖的情况应该要减少。

这就是生活中的 “高内聚,低耦合” 的例子。类似这样的例子还有很多,只要我们留心观察就能发现。

2、Java中的 “高内聚,低耦合”

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

public class A {
 public void say() {
 System.out.println("I am A");
 }
}
public class B {
 public void put(A a) {
 a.say();
 }
}

从上面这个例子中我们可以看出来,A类 和 B类 之间存在一种很强的一个联系,我们把这种联系称为强耦合关系,B类的 put方法 参数必须是 A类类型,不可以是 非A类类型。

当然了,既然有强耦合关系当然也存在所谓的弱耦合关系,弱耦合也就是我们俗说的低耦合。那么请看下面这段代码:

public interface IBase {
 void say();
}
public class A implements IBase {
 @Override
 public void say() {
 System.out.println("I am A");
 }
}
public class B implements IBase {
 @Override
 public 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类类型 其他类型皆不可的情形。

我们实现低耦合就是对两类之间进行解耦,解除类之间的直接关系,将直接关系转换成间接关系,和上面代码一样,这种思想利用了多态的思想,不过一般情况都是使用接口的方式来实现解耦的。通常情况下我们在系统分离时只是以接口的方式提供服务,供其他的模块进行使用。在模块内部有大量的信息是不要向外部暴露的,所以模块在设计时访问域的定义就要划分好,防止因为访问域的定义而对模块的信息造成破坏。


“高内聚,低耦合”,用一句话概括就是写的代码尽可能专一的完成一个任务,且各段代码尽量模块化互相独立。可能大家觉得这只是开发要懂的内容,但如果运维想深入的话这个也是绕不过去的,理解了才能更好的去设计一个系统,保证系统高效稳定

相关推荐

​石家庄简称是什么?

​石家庄简称是什么?

188

石家庄简称是什么? 石家庄,简称“石”,旧称 石门 , 河北省 辖地级市、 省会 ,是国务院批复确定的中国 京津冀地区 重要的中心城市之一,地处中国 华北地区 、河北省中南部、...

​成人能喝婴儿奶粉吗  对身体有什么好处或坏处

​成人能喝婴儿奶粉吗 对身体有什么好处或坏处

168

成人能喝婴儿奶粉吗 对身体有什么好处或坏处 调好的婴儿配方奶粉宝宝没喝完,担心浪费,很多大人都会选择喝掉,那么婴儿配方奶粉成人能喝吗?喝婴儿奶粉对成人身体健康有什么...

​「名家风采」实力画家黄建南艺术作品欣赏

​「名家风采」实力画家黄建南艺术作品欣赏

128

「名家风采」实力画家黄建南艺术作品欣赏 黄建南 号妙建,祖籍广东河源,著名书画家、收藏家、鉴定家,国家一级美术师,擅长油画、国画。全球公益联盟金质勋章的获得者,是英...

​适合男生染的5款发色,超级帅气

202

适合男生染的5款发色,超级帅气 距离学生党们开学也有一段时间了,不知道大家时隔半年的校园生活过的如何呢? 其实有对象的还好,没有对象的单身狗们不但要过着无法外出的“监...

​CK强势回应林允解约 网友:看看人家施华洛世奇

​CK强势回应林允解约 网友:看看人家施华洛世奇

217

CK强势回应林允解约 网友:看看人家施华洛世奇 来源:上海热线 序言:最近几天,越来越多的国际大牌因为模糊中国领土,而饱受中国网友非议。中国明星代言人纷纷提出终止合同,...

​假面骑士Grease大百科

​假面骑士Grease大百科

150

假面骑士Grease大百科 ---人间体状态,装备,以及其他--- 武器:双子破坏者 坐骑:无 相关道具:直升机能量满瓶,橡皮擦能量满瓶,加特林能量满瓶,熊能量满瓶,智能手机能量满瓶,...

​单田芳评书隋唐演义

438

单田芳评书隋唐演义 单田芳评书隋唐演义(216回版)简介: 《隋唐演义》是清代长篇历史演义小说,全书共一百回,七十余万字。是一部具有英雄传奇和历史演义双重性质的小说。以隋朝...

​“布衣院士”卢永根病逝,生前曾捐出880万积蓄

​“布衣院士”卢永根病逝,生前曾捐出880万积蓄

115

“布衣院士”卢永根病逝,生前曾捐出880万积蓄 中国共产党党员、中国科学院院士、华南农业大学老校长卢永根因病医治无效,于2019年8月12日早晨4:41逝世,享年88岁。 卢永根院士是我...

​郑州京广实验(原四中分校)小升初攻略!

415

郑州京广实验(原四中分校)小升初攻略! 二七区京广实验学校一直以来备受小升初家长关注,特别是近几年报名人数持续居高,京广实验究为何有这么高人气?接下来我们一起来揭秘...