Java 耦合
在面向对象的设计中,耦合是指一个元素对另一个元素的直接了解程度。换句话说,A类的变化多久会迫使B类发生相关变化。
1. 紧耦合:一般来说,紧耦合意味着两个类经常一起变化。换句话说,如果A比它应该知道的更多关于B的实现方式,那么A和B就是紧密耦合的。
例子:如果你想改变皮肤,你也必须同时改变身体的设计,因为这两者是连在一起的–它们是紧耦合的。紧耦合的最好例子是RMI(远程方法调用)。有两种类型的耦合 。
// Java program to illustrate
// tight coupling concept
class Subject {
Topic t = new Topic();
public void startReading()
{
t.understand();
}
}
class Topic {
public void understand()
{
System.out.println("Tight coupling concept");
}
}
解释:在上述程序中,主题类是依赖于主题类的。在上面的程序中,主体类与主题类是紧密耦合的,这意味着如果主题类的任何变化都需要主体类来改变。例如,如果主题类的understand()方法改为getit()方法,那么你就必须改变startReading()方法,调用getit()方法,而不是调用understand()方法。
// Java program to illustrate
// tight coupling concept
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;
}
}
输出:
125
解释:在上面的例子中,两个类之间有很强的相互依赖关系。如果盒子类有任何变化,它们就会反映在类卷的结果中。
- 松散耦合:简单地说,松散耦合意味着它们大部分是独立的。如果A类对B类的唯一了解是B类通过其接口暴露出来的,那么A类和B类就被称为松散耦合。为了克服对象之间的紧耦合问题,spring框架在POJO/POJI模型的帮助下使用了依赖注入机制,通过依赖注入,可以实现松耦合。
例子:如果你改变了你的衬衫,那么你不会被迫改变你的身体–当你可以这样做的时候,你就有了松散耦合。当你不能这样做的时候,你就有了紧耦合。松散耦合的例子是接口、JMS。
// Java program to illustrate
// loose coupling concept
public interface Topic
{
void understand();
}
class Topic1 implements Topic {
public void understand()
{
System.out.println("Got it");
}
} class Topic2 implements Topic {
public void understand()
{
System.out.println("understand");
}
} public class Subject {
public static void main(String[] args)
{
Topic t = new Topic1();
t.understand();
}
}
解释:在上面的例子中,Topic1和Topic2对象是松散耦合的。这意味着Topic是一个接口,我们可以在运行时注入任何一个实现的类,我们可以向终端用户提供服务。
// Java program to illustrate
// loose coupling concept
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;
}
}
输出:
125
解释:在上述程序中,两个类之间没有依赖关系。如果我们改变了Box类中的任何东西,那么我们就不必改变Volume类中的任何东西。
**紧耦合和松耦合哪一个更好?
一般来说,紧耦合在大多数情况下是不好的,因为它降低了代码的灵活性和可重用性,它使改变变得更加困难,它阻碍了测试能力等等。如果你用松散耦合的架构设计,当需求发生变化时,只有应用程序的少数部分会受到影响。
让我们来看看紧耦合和松耦合的图解:
紧耦合和松耦合的区别
- 严密耦合在测试能力方面并不出色。但松散耦合提高了测试能力。
- 紧密耦合没有提供接口的概念。但松散耦合帮助我们遵循GOF原则,即程序与接口,而不是实现。
- 在紧耦合中,在两个类之间交换代码是不容易的。但在松耦合中,交换其他的代码/模块/对象/组件要容易得多。
- 紧密耦合不具备改变的能力。但松散耦合是高度可改变的。