Oop 说一个对象有依赖关系是什么意思?
我一直在读到对象x有依赖关系。有些人说这很糟糕,有些人在某些情况下还行,但我一开始不明白这意味着什么。我看到了: 但我一开始并不理解依赖性的概念。这个标签实际上给出了一个很好的定义,但希望能有一个例子。“依赖性”可以表示许多不同的东西,这取决于上下文(双关语) 在这种情况下,它实际上意味着“我需要什么特定的‘对象’(可能来自许多对象)来完成工作?” 例如,组件需要“打印”的内容。依赖项为“打印”,但请求的对象可以打印到HP Laserjet 9200、Oki点阵或.pdf文件 换言之,您可以在这里用“plug-in”代替“dependency”,并保持相同的含义Oop 说一个对象有依赖关系是什么意思?,oop,object,dependencies,Oop,Object,Dependencies,我一直在读到对象x有依赖关系。有些人说这很糟糕,有些人在某些情况下还行,但我一开始不明白这意味着什么。我看到了: 但我一开始并不理解依赖性的概念。这个标签实际上给出了一个很好的定义,但希望能有一个例子。“依赖性”可以表示许多不同的东西,这取决于上下文(双关语) 在这种情况下,它实际上意味着“我需要什么特定的‘对象’(可能来自许多对象)来完成工作?” 例如,组件需要“打印”的内容。依赖项为“打印”,但请求的对象可以打印到HP Laserjet 9200、Oki点阵或.pdf文件 换言之,您可以在
“希望这能有所帮助.当谈到依赖项注入时,我通常会说类而不是对象具有依赖项 类
A
依赖于类B
,如果它要求类B
存在并且可能以某种方式工作。例如,如果类A
调用了newb()
,则它依赖于类B
。如果类B
消失或更改,您的类A
可能会中断
在某些语言中,您可以通过允许类依赖于接口来打破依赖关系。如果您依赖于接口I
,而B
实现了I
,那么B可以消失,被同样实现I
的C
取代,而A
根本不需要更改。例如,您可以在操作系统中使用一个驱动程序,如果更换磁盘,您可能会得到一个实现“磁盘驱动器”接口的新驱动程序,但是您的操作系统仍然以相同的方式与磁盘通信,而不知道它是什么类型的磁盘
依赖项注入是让您依赖于接口而不是类,基本上不是说new B()
,您只需要声明您想要一个实现I
的对象,并为您注入一个合适的实现。你的类A
不必知道类B
或C
甚至存在。如果你说“类A”对接口I(由类B和C实现)有“依赖性”,那么我同意。我将更进一步地说,该类通过需要一个接口来“发布”依赖项。但是这个概念适用于那些甚至没有Java意义上的“接口”的语言。也许“协议”和“插件”可能更好,“接口”和“实现”的术语更通用。@palsm4没错,需要接口是更好的措辞,特别是当涉及依赖注入时。我在这里对“接口”的理解有点松散,因为它是一个通常可以理解的概念,即使它在所有语言中的实现方式并不相同。