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