首页 > 其他分享 >什么是耦合?解耦合的方法有哪几种?

什么是耦合?解耦合的方法有哪几种?

时间:2023-03-25 20:44:23浏览次数:70  
标签:void class Base 哪几种 base 耦合 方法 public

项目的开发过程中,我们经常强调项目的代码模块尽量做到低耦合高内聚,但是什么是耦合?怎样做到低耦合?

什么是耦合?

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

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

怎么实现低耦合?

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

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

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

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();
    }
}

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

利用适配器模式进行解耦

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

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

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

 

参考:

 

标签:void,class,Base,哪几种,base,耦合,方法,public
From: https://www.cnblogs.com/xfeiyun/p/17255520.html

相关文章

  • Java获取系统时间的4种方法
    Java获取系统时间的4种方法1publicDateTime(){2//1.设置时间格式3/*4*yyyy-MM-dd:年-月-日2023-03-255......
  • mysql手动实现窗口函数的方法
    背景:窗口函数是一种强大的SQL函数,它允许在查询中对一组行进行计算,而不需要将它们分组或汇总。然而,如果使用的MySQL版本不支持窗口函数,我们仍然可以通过一些技巧手动实现它......
  • [FastAPI-23]响应体pydantic dict方法
    importtypingfromfastapiimportFastAPI,Responsefromfastapi.responsesimportJSONResponsefrompydanticimportBaseModelapp=FastAPI()'''pydanticd......
  • 用pyinstaller 打包程序碰到的问题和解决方法(scipy...)
    一、打包程序库选择py2exe.不支持python3cx_Freeze.现在只更新到python3.3pyinstaller.支持python2、python3所有版本因为现在使用的版本是python3.6,所以......
  • 方法重写
    方法重写方法重写只跟非静态方法有关重写:需要有继承关系,子类重写父类的方法!!方法名必须相同参数列表必须相同修饰符:范围可以扩大public>protected>default>priv......
  • 知识图谱推荐算法-基于嵌入的推荐方法
    基于嵌入的方法使用知识图谱中的信息来丰富用户或项目的表示,通过知识图谱嵌入将知识图谱中的实体和关系表征为低维向量,保留了知识图谱原有的结构。知识图谱通常存在链......
  • Barzilai-Borwein(BB)方法
    BB方法,即Barzilai-Borwein(BB)method是梯度下降方法的一种,他主要是通过近似牛顿方法来实现更快的收敛速度,同时避免计算二阶导数带来的计算复杂度:经典牛顿法:首先,设$f......
  • Go语言拼接URL路径的三种方法
    Go语言拼接URL路径有多种方法建议用ResolveReference。JoinPathJoinPath会把多个多个路径合并成一个路径,并且处理../和./,多个//合并成单个/。packagemainimport( "fmt"......
  • Activity通过构造方法和普通方法向Fragment传递参数
    今天学习了Activity通过构造方法和普通方法向Fragment传递参数这种方式的缺点是传递数据量较少看一下效果:  代码实现:这里示例了两种方法,一个是用构造方法,一个是普......
  • windows下安装mysql8方法
    系统环境及软件版本:windows11,MySQL8.0.32。windows下安装mysql有两种方法,一个下载mysql的exe可执行文件安装,比较适合小白,下载后双击执行安装包,下一步、下一步就可以。第二......