美文网首页计算机语言工具文
什么是耦合,解耦的几种方式

什么是耦合,解耦的几种方式

作者: 不怕天黑_0819 | 来源:发表于2021-09-03 11:19 被阅读0次

结果先行,解耦的几种方式主要包括利用继承思想形成的多态性,如类的向上转型或接口回调。已经使用适配器设计模式。

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

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

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{

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

二、怎么实现低耦合?
实现低耦合就是对两类之间进行解耦,解除类之间的直接关系,将直接关系转换成间接关系,下面来提供两种解耦思路。

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

public class Base{
   public void say(){
        System.out.println("I am Base");
    }
}
public class A extends Base{

    @Override
    public void say() {
        System.out.println("I am A");
    }
}

public class B extends Base{

    @Override
    public 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的修改。

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

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

作者:忽如一夜听春雨

链接:blog.csdn.net/qq_24499615/article/details/77821896

相关文章

  • 什么是耦合,解耦的几种方式

    结果先行,解耦的几种方式主要包括利用继承思想形成的多态性,如类的向上转型或接口回调。已经使用适配器设计模式。 在项...

  • 什么是耦合、解耦

    一、耦合 1、耦合是指两个或两个以上的体系或两种运动形式间通过相互作用而彼此影响以至联合起来的现象。 2、在软件工...

  • MVC

    架构的中心就是 耦合解耦 :使不同的类或不同的模块之间交互影响越少,常用的解耦方式 Delegate Na...

  • 为什么工厂模式可以解耦?why?

    1、聊聊解耦? 耦合:代码之间的关联关系称为耦合,具有强关联关系的称为强耦合。 解耦:解除代码之间的关联关系,使每...

  • 解耦

    解耦 对于大型重构, 最有效的手段就是 解耦, 解耦的目的使实现代码高聚合、松耦合。 解耦为何如此...

  • mq

    为什么要用mq? 解耦 mq可以解耦合,系统a和其他系统紧耦合,用mq,其他系统可以自己pub/sub 异步化 提...

  • 架构 - iOS架构设计之模块间的解耦尝试

    前言 工程大了以后,就需要分拆,不管是组件化还是插件化,还是什么,解耦是第一步,而且是各个维度的解耦。 模块解耦合...

  • Java之多线程

    Thread(耦合,不推荐) Runnable(解耦,推荐) Executors ExecutorService ...

  • 分布式消息队列

    1 为什么要使用消息队列 最主要得应用场景:解耦 异步 削峰 (1)解耦 传统模式:系统间得耦合度强 如系统A直接...

  • JS高程:读书摘要(二十)终章

    一、可维护性 松散耦合 解耦HTML/JavaScript HTML 是数据,JavaScript 是行为。因为它...

网友评论

    本文标题:什么是耦合,解耦的几种方式

    本文链接:https://www.haomeiwen.com/subject/sdqeiltx.html