我有三個主要類,可以說A,B和C. A實例化B和C. B也依賴於C. B通過setter/getter方法訪問C的對象。這可以。 我的問題是A的實現與B和C的實現緊密結合。 我想解耦這個。 我不想使用spring框架。有沒有其他方法?我想爲他們的(B,C)初始化創建工廠,但這意味着無論何時A或C需要訪問B,他們必須再次創建工廠的新實例..這看起來不正確。 我應該如何解決這個問題? 我不確定IOC容器在這裏有用嗎?實現依賴注入混淆
Q
實現依賴注入混淆
0
A
回答
1
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);
這解耦實例B
S和C
S,通過與那些依賴關係(因此,依賴注入)注入它的細節A
。
要從實施脫鉤A
,你要爲B
功能和C
是A
大約關心創建界面。說,Bable
和Cable
。然後A
可以接受作爲其構造參數的Bable
和Cable
,並且不關心實現這些接口的類是什麼,或者實現如何工作 - 只是它符合由Bable
和Cable
規定的合約。
這裏是我談論的完全充實出例如:https://gist.github.com/2402514
0
您可以指定具體對象A應當在其構造函數中使用然後將它們存儲爲成員變量。這樣,您就不必創建對象超過一次,並且可以提供其他類的對象(即實現相同的接口爲B,說)
public class A
{
private BIface b;
private CIface c;
public A(BIface b, CIface c) {
this.b = b;
this.c = c;
}
}
interface BIface {
// required B methods
}
public class B implments BIface
{
// implement the interface
}
同樣,對於C/CIface
使用它像這樣:
BIface c = new C(); // or some other class also implementing CIface
BIface b = new B(c); // or some other class also implementing BIface
A a = new A(b, c);
相關問題
- 1. Zendframework2依賴注入混淆
- 2. Spring依賴注入範圍混淆
- 3. AngularJS依賴注入 - 混淆語法
- 4. 依賴注入和代碼混淆
- 5. Autofac依賴注入實現
- 6. 依賴注入的實現
- 7. 依賴注入實現
- 8. Castle Windsor依賴注入與多個混凝土實現
- 9. 功能依賴混淆
- 10. OOP:聚合/依賴混淆
- 11. Odoo混淆依賴關係?
- 12. Maven傳遞依賴混淆
- 13. 使用otto進行片段間通信 - 依賴注入混淆
- 14. 依賴注入的實現像角
- 15. 如何手動實現依賴注入?
- 16. 春天依賴注入匿名實現
- 17. 向IWindsorInstaller實現注入依賴關係
- 18. 依賴注入實現簡單
- 19. 實現MVVMC和依賴注入
- 20. 依賴注入和具體的依賴實現
- 21. EF:實體依賴注入
- 22. 混合封裝和依賴注入
- 23. 依賴注入
- 24. 依賴注入
- 25. 依賴注入
- 26. 依賴注入
- 27. 依賴注入
- 28. 依賴注入
- 29. 混淆流水線,危險,依賴
- 30. 使用依賴注入來注入依賴注入器
這不是很清楚。爲什麼A與B和C的實現「緊密結合」?你能展示一些簡短的示例代碼嗎? – 2012-04-17 00:10:08