我是一名 Java 开发人员,我尝试了解 Java 中的耦合,紧密耦合与松散耦合。信息很多,定义也很简单:耦合——组件之间的依赖程度。如果依赖关系较多,则认为是紧密耦合,如果依赖关系较少,则认为是松耦合。
但是当我看这个例子时我不明白。例如这个网站 https://www.geeksforgeeks.org/coupling-in-java/
紧耦合示例
class Volume
{
public static void main(String args[])
{
Box b = new Box(5,5,5);
System.out.println(b.volume);
}
}
class Box
{
public int volume;
Box(int length, int width, int height)
{
this.volume = length * width * height;
}
}
“说明:在上面的示例中,两个类之间存在很强的相互依赖性。如果 Box 类有任何更改,则会反映在 Class Volume 的结果中。”
松耦合示例
class Volume
{
public static void main(String args[])
{
Box b = new Box(5,5,5);
System.out.println(b.getVolume());
}
}
final class Box
{
private int volume;
Box(int length, int width, int height)
{
this.volume = length * width * height;
}
public int getVolume()
{
return volume;
}
}
“说明:在松散耦合的程序中,两个类之间不存在依赖关系。如果我们更改 Box 类中的任何内容,则不必更改 Volume 类中的任何内容。”
但这不是真的,如果我们将类 Box 更改为 ex,我们会在构造函数中添加另一个参数,如下所示:
Box(int length, int width, int height, int b)
{
this.volume = length * width * height + b;
}
然后我们需要更改类Volume,否则会出现编译错误:
Box b = new Box(5,5,5,3);
因此,这些更改应该针对紧密耦合和松散耦合的示例进行。当他们说您不需要更改 Volume 类中的某些内容时,他们指的是什么?任何反馈将不胜感激!
对象有一个 API——任何人都可以使用的面向公众的部分。如果您向 API 添加一些新的强制内容,或删除某些部分,那么调用代码很可能也必须更新。但并非所有对类的更改都必须更改 API。例如,考虑一下如果您想在
Box
类中存储各个维度,而不是体积(您可能不想同时存储两者,因为这是不必要的重复 - 如果其中一个维度发生变化,您将拥有无论如何都要重新计算体积)。在紧耦合场景中,更改后无法保持 Main
不变。在松耦合场景中,您为维度添加新的 private
字段并更改 getVolume()
的实现,但 Main
不关心这一点,也不会改变。