我对 java 中的松耦合和紧耦合有些困惑。我知道松耦合意味着彼此之间的信息最少,而紧耦合意味着依赖。我们知道松耦合可以通过接口(interface)实现和继承实现紧耦合。
例如:
1)A(接口(interface))<-------------------- B(类)
2) C (类) <-------------------- D (类)
假设这四个类是我整个应用程序的一部分,在 B 或 D 中进行更改不会对应用程序产生任何影响(从运行的角度来看)。从 A 或 C 中删除任何方法或变量需要对应用程序进行如此多的更改。好的分数是 2-2,但在 C 或 A 中添加新方法是不同的。如果我在 C 中添加新方法不会影响应用程序,但在添加 A 时,至少我必须在 B 和所有实现接口(interface) A 的类中重写此方法。所以至少在这种情况下它是如何松散耦合的。 我的疑问是,继承是否总是紧密耦合。我了解到继承是 OOP 的强大工具之一。用于设计类是否遵循“是一种关系”然后使用继承。 松散耦合意味着彼此之间的信息较少。 A和C都不知道将来要实现或扩展哪个类,但是添加B和D后现在B不依赖于A,因为它的所有方法都是抽象的,但是D也可以覆盖继承特性。
最佳答案
as we know loose coupling can achieve through interface implementation and inheritance make tight couple.
我想你弄错了。 “耦合”通常是关于 2 个不同的类,它们通过具体类或仅通过某些接口(interface)相互了解。
假设 2 个类 A 和 B 需要相互通信。
A <--knows--> B
A 中的方法会有一些参数 B,而 B 中的方法有一个类型为 A 的参数。喜欢
class A {
public void talkTo(B b) {}
}
现在这就是 A 和 B 之间的紧密耦合,因为您对这些类所做的每一次更改都会使其他类发生必要的更改。
如果松散耦合,它们都会通过某个接口(interface)暴露自己。 (“接口(interface)”也可以表示抽象类 - 这是各自方面的选择。)
IA <-- A
^ |
\ /
X < loose coupling between the A side and the B side
/ \
v |
IB <-- B < pretty tight coupling betwen IB and B
它们之间的通信通过这些接口(interface)进行
class A implements IA {
public void talkTo(IB b);
}
class B implements IB {
public void talkTo(IA a);
}
A 和 IA 之间的依赖关系(这就是您所看到的)并不是紧耦合与松耦合的主要关系。有一些相似之处,但松散耦合并不意味着您应该实现接口(interface)而不是扩展抽象类。不过,通常只实现一个接口(interface)会更好。
如果您可以将“IS A”关系替换为“HAS A”关系,那么您所做的基本上是一样的。您将自己(例如,您是 A)与具体实现解耦,只需要依赖封装的另一端(例如,来自 B 端)。继承确实是一个非常强大的特性,但它经常被误用。
关于java - 什么是oop中的松耦合和紧耦合(java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20445939/