我一直在閱讀那個對象x有依賴關係。有些人說這很糟糕,其他人在某些情況下還好,但我不明白這意味着什麼。我看到這一點:說對象有依賴關係是什麼意思?
但不明白的依賴概念開始。這個標籤實際上給了一個很好的定義,但希望有一個例子。
我一直在閱讀那個對象x有依賴關係。有些人說這很糟糕,其他人在某些情況下還好,但我不明白這意味着什麼。我看到這一點:說對象有依賴關係是什麼意思?
但不明白的依賴概念開始。這個標籤實際上給了一個很好的定義,但希望有一個例子。
「依賴」可以意味着很多不同的事情,這取決於(雙關語意)上下文;)
在這種情況下,它真正的意思是「有什麼特定的‘對象’(來自也許很多),我需要得到工作完成了嗎?「
例如,組件需要「打印」的內容。依賴項是「打印」,但所請求的對象可以打印到HP Laserjet 9200或Oki點陣或.pdf文件。
換句話說,你可以在這裏用「插件」來代替「依賴」,並保持相同的含義。
「希望幫助..
在談到依賴注入,我通常說類,沒有對象有依賴關係。
類A
對類B
有依賴關係,如果它要求類B
存在並可能以某種方式工作。例如,如果A
類別的電話號碼爲new B()
,則它對類別B
有依賴性。如果B
類消失或更改,您的類A
可能會中斷。
您可以在某些語言中通過允許類取決於interface
來取代依賴關係。如果您依賴於接口I
,而B
實現了I
,則B可以消失並被替換爲C
,其也實現I
,並且A
根本不需要改變。作爲一個例子,您可以在操作系統中使用驅動程序,如果更換磁盤,您可能會得到一個實現「磁盤驅動器」接口的新驅動程序,但是操作系統仍然以相同的方式與磁盤進行通信它究竟是什麼類型的磁盤。
依賴注入是關於讓你依賴接口而不是類,基本上而不是說new B()
,你只是聲明你想要一個實現了I
的對象,並且會爲你注入一個合適的實現。您的班級A
不必有任何想法即使存在類B
或C
。
如果你說「class A」對* interface * I有一個「依賴」(這是由類B和C實現的),那麼我會同意。我會進一步說,該類通過*需要一個接口「發佈」一個依賴項。但是這個概念適用於甚至沒有Java的意義上的「接口」的語言。也許「協議」和「插件」可能是更好,更「通用」和「實現」的通用術語。 – paulsm4
@ paulsm4真的,需要一個接口是一個更好的措辭,特別是當它涉及依賴注入時。我在這裏用「接口」鬆散地玩了一下,因爲它是一個通常可以理解的概念,即使它的執行方式在所有語言中都沒有表現出相同的方式。 –