You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

什么是依赖类?松耦合与紧耦合相关困惑求解

嘿,别着急,我来帮你把「依赖类」这个概念和它跟松/紧耦合的关系讲清楚!

先搞懂:什么是依赖类?

简单来说,**依赖类(dependent class)**就是一个必须借助另一个类(我们通常叫它「被依赖类/服务类」)的功能,才能完成自身职责的类。打个生活化的比方:如果你是个做咖啡的店员(依赖类),你必须用咖啡机(被依赖类)才能做出咖啡——没有咖啡机,你就干不了活,这就是依赖关系。

结合松/紧耦合看依赖类的不同表现

光说定义太干,咱们用代码例子对比着看,你一下子就能明白。

例子1:紧耦合下的依赖类

这种情况里,依赖类直接绑定了具体的被依赖类,完全没得选:

// 被依赖类:一款具体的基础咖啡机
class BasicCoffeeMaker {
    public void brewCoffee() {
        System.out.println("用基础咖啡机煮出普通咖啡");
    }
}

// 依赖类:咖啡店,它必须用BasicCoffeeMaker才能做咖啡
class CoffeeShop {
    private BasicCoffeeMaker coffeeMaker;

    public CoffeeShop() {
        // 直接在内部创建了BasicCoffeeMaker的实例——这就是紧耦合!
        this.coffeeMaker = new BasicCoffeeMaker();
    }

    public void serveCustomer() {
        coffeeMaker.brewCoffee();
        System.out.println("咖啡做好啦,请慢用~");
    }
}

这里的CoffeeShop就是依赖类,它和BasicCoffeeMaker绑定得死死的:如果以后老板想换高端咖啡机,你必须修改CoffeeShop的构造方法,把内部创建的对象换成新的咖啡机类——这就是紧耦合的痛点:依赖类的改动成本极高。

例子2:松耦合下的依赖类

松耦合的关键是让依赖类只依赖抽象的接口/父类,而不是具体的实现:

// 先定义一个抽象的咖啡机接口(相当于「咖啡机的标准」)
interface CoffeeMaker {
    void brewCoffee();
}

// 具体实现1:基础咖啡机
class BasicCoffeeMaker implements CoffeeMaker {
    @Override
    public void brewCoffee() {
        System.out.println("用基础咖啡机煮出普通咖啡");
    }
}

// 具体实现2:高端咖啡机
class PremiumCoffeeMaker implements CoffeeMaker {
    @Override
    public void brewCoffee() {
        System.out.println("用高端咖啡机煮出精品手冲咖啡");
    }
}

// 依赖类:咖啡店,现在它只依赖抽象的CoffeeMaker接口
class CoffeeShop {
    private CoffeeMaker coffeeMaker;

    // 通过构造方法传入依赖,而不是自己创建——这就是依赖注入
    public CoffeeShop(CoffeeMaker coffeeMaker) {
        this.coffeeMaker = coffeeMaker;
    }

    public void serveCustomer() {
        coffeeMaker.brewCoffee();
        System.out.println("咖啡做好啦,请慢用~");
    }
}

// 用的时候随便换咖啡机,CoffeeShop完全不用改!
public class Main {
    public static void main(String[] args) {
        CoffeeShop basicShop = new CoffeeShop(new BasicCoffeeMaker());
        basicShop.serveCustomer();

        CoffeeShop premiumShop = new CoffeeShop(new PremiumCoffeeMaker());
        premiumShop.serveCustomer();
    }
}

这里的CoffeeShop依然是依赖类,但它现在只关心“这个东西能煮咖啡”(符合CoffeeMaker接口),不管它是基础款还是高端款。想换咖啡机?直接传个新的实现类就行,CoffeeShop的代码一行都不用改——这就是松耦合的优势:灵活、易维护。

一句话总结

依赖类就是“需要别人帮忙才能干活”的类;紧耦合是依赖类绑定死了具体的帮手,松耦合是依赖类只绑定帮手的“能力标准”,不关心具体是谁。

内容的提问来源于stack exchange,提问作者AndyE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:27:43