为什么松散耦合中不需要改变Java类?

问题描述 投票:0回答:1

我是一名 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 类中的某些内容时,他们指的是什么?任何反馈将不胜感激!

java dependencies coupling
1个回答
0
投票

对象有一个 API——任何人都可以使用的面向公众的部分。如果您向 API 添加一些新的强制内容,或删除某些部分,那么调用代码很可能也必须更新。但并非所有对类的更改都必须更改 API。例如,考虑一下如果您想在

Box
类中存储各个维度,而不是体积(您可能不想同时存储两者,因为这是不必要的重复 - 如果其中一个维度发生变化,您将拥有无论如何都要重新计算体积)。在紧耦合场景中,更改后无法保持
Main
不变。在松耦合场景中,您为维度添加新的
private
字段并更改
getVolume()
的实现,但
Main
不关心这一点,也不会改变。

© www.soinside.com 2019 - 2024. All rights reserved.