为什么需要解耦?

版权声明:本文为 小异常 原创文章,非商用自由转载-保持署名-注明出处,谢谢!
本文网址:https://blog.csdn.net/sun8112133/article/details/81040275

  为什么需要解耦?回答这个问题,我们必须得知道什么是解耦。相信大多数小伙伴们都在软件工程中听过这样一句话 —— “高内聚,低耦合”。那么什么是 “高内聚” ,什么是 “低耦合” 呢? 别着急,请听我慢慢道来。

本篇大体可以分为三大部分:

  一、什么是内聚

  二、什么是耦合

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





一、什么是内聚

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

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


二、什么是耦合

  耦合,从字面上来看有藕断丝连的意思,“耦” 这个字在中国汉语里指的是两个人在一起耕地,他俩各干各的互不影响,这也是“耦合”的由来。那么 低耦合也就是尽可能的使每个模块之间或者每个类之间再或者是每个方法之间的关联关系减少,这样可以使各自尽可能的独立,一个地方出错,不会影响全部,更能提高代码的重用性。

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


  

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

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

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

  我们可以想想为什么要这样安排呢?如果我们国家的军队不分的那么细,每支部队都有在海上、陆地、空中作战的士兵,如果我们和日本在海上大战,我们还需要从各个部队中抽取能够在海上作战的士兵,再组成一支海上抗日军这样的部队,抽取出来的士兵的战斗力各有不一,还需要一个适应的过程,我们想想这支一盘散沙的部队能取得胜利嘛?打仗在于兵贵神速,这样的一支部队还是一盘散沙呢,怎么能做到兵贵神速呢?那么我们可以早早的就把他们分为海军、陆军、空军,海军就负责在海上作战,陆军就负责在陆地作战,空军就负责在空中作战,我们如果和日本进行海上大战,我们直接派海军过去不就可以了嘛?

扫描二维码关注公众号,回复: 2440058 查看本文章

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

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

海陆空

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

  我们实现低耦合就是对两类之间进行解耦,解除类之间的直接关系,将直接关系转换成间接关系,和上面代码一样,这种思想利用了多态的思想,我们一般情况都是使用接口的方式来实现解耦的。

  “高内聚,低耦合”,用一句话概括就是写的代码尽可能专一的完成一个任务,且各段代码尽量模块化互相独立。


猜你喜欢

转载自blog.csdn.net/sun8112133/article/details/81040275