首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在面向对象的范例中,松耦合和紧耦合的区别是什么?

在面向对象的范例中,松耦合和紧耦合的区别是什么?
EN

Stack Overflow用户
提问于 2010-05-14 13:32:21
回答 9查看 352.7K关注 0票数 313

在面向对象的范例中,有谁能描述松散耦合和紧密耦合之间的确切区别?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2010-05-14 13:38:54

紧耦合是指一组类彼此高度依赖的情况。

当一个类承担了太多的责任,或者当一个关注点分散在多个类而不是拥有自己的类时,就会出现这种情况。

松耦合是通过促进单一责任和关注点分离的设计来实现的。

松耦合的类可以独立于其他(具体的)类来使用和测试。

接口是用于解耦的强大工具。类可以通过接口进行通信,而不是通过其他具体的类进行通信,任何类都可以通过实现接口而处于通信的另一端。

紧耦合示例:

代码语言:javascript
运行
复制
class CustomerRepository
{
    private readonly Database database;

    public CustomerRepository(Database database)
    {
        this.database = database;
    }

    public void Add(string CustomerName)
    {
        database.AddRow("Customer", CustomerName);
    }
}

class Database
{
    public void AddRow(string Table, string Value)
    {
    }
}

松散耦合示例:

代码语言:javascript
运行
复制
class CustomerRepository
{
    private readonly IDatabase database;

    public CustomerRepository(IDatabase database)
    {
        this.database = database;
    }

    public void Add(string CustomerName)
    {
        database.AddRow("Customer", CustomerName);
    }
}

interface IDatabase
{
    void AddRow(string Table, string Value);
}

class Database implements IDatabase
{
    public void AddRow(string Table, string Value)
    {
    }
}

另一个例子是here

票数 395
EN

Stack Overflow用户

发布于 2010-05-14 13:45:54

在面向对象设计中,耦合的数量指的是一个类的设计在多大程度上依赖于另一个类的设计。换句话说,A类中的更改多久会强制B类中与更改相关的更改?紧耦合意味着两个类经常一起变化,松耦合意味着它们大多是独立的。通常,推荐使用松散耦合,因为这样更容易测试和维护。

您可能会发现this paper by Martin Fowler (PDF)很有帮助。

票数 75
EN

Stack Overflow用户

发布于 2012-10-08 17:12:13

一般来说,紧密耦合是不好的,但在大多数情况下,因为它降低了代码的灵活性和可重用性,它使更改变得更加困难,它阻碍了可测试性等。

紧密耦合的对象是一个需要相互了解的对象,并且通常高度依赖于彼此的接口。在紧密耦合的应用程序中更改一个对象通常需要更改许多其他对象,在小型应用程序中,我们可以很容易地识别这些更改,并且很少有机会错过任何东西。但在大型应用程序中,这些相互依赖关系并不是每个程序员都知道的,或者有机会错过更改。但每组松散耦合的对象并不依赖于其他对象。

简而言之,我们可以说,松散耦合是一个寻求减少系统组件之间的相互依赖性的设计目标,其目标是降低在一个组件中的更改将需要在任何其他组件中更改的风险。松散耦合是一个更通用的概念,旨在增加系统的灵活性,使其更具可维护性,并使整个框架更加“稳定”。

耦合指的是一个元素对另一个元素的直接了解程度。我们可以说:A和B,只有当A改变它的行为时,B才改变它的行为。松散耦合的系统可以很容易地分解为可定义的元素。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2832017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档