我有三个主要类(class),比如说 A、B 和 C。 A 实例化 B 和 C。B 也依赖于 C。B 通过 setter/getter 方法访问 C 的对象。这可以。 我的问题是 A 的实现与 B 和 C 的实现紧密耦合。 我想把这个脱钩。 我不想使用spring框架。还有其他办法吗?我想过为他们的(B,C)初始化创建工厂,但这意味着每当A或C需要访问B时,他们都必须再次创建工厂的新实例..这似乎不对。 我应该如何解决这个问题? 不知道IOC容器在这里有用吗?
最佳答案
A
不应直接实例化B
或C
。相反,它应该接受它们的实例作为构造函数参数:
public class A
{
private B b;
private C c;
public A(B b, C c)
{
this.b = b;
this.c = c;
}
}
// When creating your object graph, in the "composition root":
B b = new B();
C c = new C(b);
A a = new A(b, c);
这解耦了A
从实例化的细节来看B
和 C
s,通过将这些依赖项注入(inject)它(因此,依赖项注入(inject))。
解耦A
从实现开始,您将需要为 B
的功能创建接口(interface)和C
那A
关心。说,Bable
和Cable
。然后A
可以接受 Bable
作为其构造函数参数和一个 Cable
,并且不关心哪个类实现这些接口(interface),或者实现如何工作——只是它符合 Bable
制定的契约。和Cable
.
这是我正在讨论的一个完整的例子:https://gist.github.com/2402514
关于java - 实现依赖注入(inject)困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10183341/