Java 中的紧耦合和松耦合有什么区别?
javaobject oriented programmingprogramming更新于 2024/7/26 23:29:00
紧耦合表示类和对象相互依赖。一般来说,紧耦合通常并不好,因为它会降低代码的灵活性和可重用性,而松耦合则表示减少直接使用不同类的类的依赖性。
紧耦合
- 紧耦合对象是需要了解其他对象的对象,并且通常高度依赖于彼此的接口。
- 在紧耦合应用程序中更改一个对象通常需要更改许多其他对象。
- 在小型应用程序中,我们可以轻松识别更改,并且不太可能遗漏任何内容。但在大型应用程序中,这些相互依赖关系并不总是每个程序员都知道的,并且有可能忽略更改。
示例
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'为私有,则类 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 value is: " + aObject.getA()); } }
在上面的例子中,这种实现定义的代码使用松散耦合,并且是推荐的,因为类 B 必须通过类 A 来获取其强制执行规则的状态。如果类 A 在内部发生更改,类 B 不会中断,因为它仅使用类 A 作为通信方式。
输出
getA() method aObject value is: 0