Java中的紧耦合和松耦合有什么区别?

紧耦合意味着类和对象相互依赖。一般来说,紧耦合通常不好,因为它降低了代码的灵活性和可重用性,而松耦合意味着减少直接使用不同类的类的依赖关系。

紧耦合

  • 紧密耦合的对象是需要了解其它的目的和通常是高度依赖于彼此的接口的对象。

  • 紧密耦合的应用程序中更改一个对象通常需要更改多个其他对象。

  • 在小型应用程序中,我们可以很容易地识别更改,并且遗漏任何东西的机会更少。但是在大型应用程序中,并非每个程序员都知道这些相互依赖关系,并且有可能忽略更改。

示例

class A {
   public int a = 0;
   public int getA() {
      System.out.println("getA() method");
      return a;
   }
   public void setA(int aa) {
      if(!(aa > 10))
         a = aa;
   }
}
public class B {
   public static void main(String[] args) {
      A aObject = new A();
     aObject.a= 100; // 不应该按照类 A 的定义发生,这会导致紧密耦合。
      System.out.println("aObject.a value is: " + aObject.a);
   }
}

在上面的例子中,这种实现定义的代码使用紧耦合并且非常糟糕,因为类 B 知道类 A 的细节,如果类 A 将变量 'a' 更改为 private 那么类 B 也会中断类 A 的实现声明变量 'a' 不应超过 10,但正如我们所见,没有办法强制执行这样的规则,因为我们可以直接转到变量并将其状态更改为我们决定的任何值。

输出结果

aObject.a value is: 100

松耦合

  • 松散耦合是一种设计目标,旨在减少系统组件之间的相互依赖性,目的是降低一个组件的更改需要更改任何其他组件的风险。

  • 松耦合是一个更通用的概念,旨在增加系统的灵活性,使其更易于维护并使整个框架更稳定。

示例

class A {
   private int a = 0;
   public int getA() {
      System.out.println("getA() method");
      return a;
   }
   public void setA(int aa) {
      if(!(aa > 10))
         a = aa;
   }
}
public class B {
   public static void main(String[] args) {
      A aObject = new A();
      aObject.setA(100); // 无法将 'a' 设置为此方法调用将要使用的值
                         // 由于其强制规则而失败。
      System.out.println("aObject 值为: " + aObject.getA());
   }
}

在上面的示例中,由这种实现定义的代码使用松散耦合,并且推荐使用,因为类 B 必须通过类 A 才能获得强制执行规则的状态。如果在内部更改 A 类,则 B 类不会中断,因为它仅使用 A 类作为通信方式。

输出结果

getA() method
aObject 值为: 0