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; // Not suppose to happen as defined by class A, this causes tight coupling.
      System.out.println("aObject.a value is: " + aObject.a);
   }
}

在上面的示例中,这种实现方式定义的代码使用了紧耦合,这是非常不好的,因为类 B 了解类 A 的细节,如果类 A 将变量 'a' 更改为私有,则类 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); // No way to set 'a' to such value as this method call will
                         // fail due to its enforced rule.
      System.out.println("aObject value is: " + aObject.getA());
   }
}

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

输出

getA() method
aObject value is: 0

更新于:2020年2月6日

15K+ 浏览量

启动您的职业生涯

完成课程获得认证

开始学习
广告