我目前正在阅读有关依赖倒置原则的其他优秀教程
https://www.baeldung.com/java-dependency-inversion-principle
尽管思考了相当长的时间,但有些东西我无法解释
DIP 定义的相关部分:“高级模块不应该依赖于低级模块。两者都应该依赖于抽象。”
在第 3.1 点“设计选择和 DIP”中,作者通过一个示例介绍了原理,其中一个StringProcessor
类使用 aStringReader
和一个StringWriter
组件,并使用接口/类和包提供多种设计选择。我的问题是选择 2
“StringReader
并且StringWriter
是与实现一起放置在同一包中的接口。StringProcessor
现在依赖于抽象,但低级组件不依赖。我们还没有实现依赖关系的反转”
StringProcessor
是依赖于“抽象”即接口的“高级组件”,从而从一侧实现DIP定义,这一点很清楚。现在给出在第一句中提到的文章“实现”中使用的术语,例如 a和一个类将是这里的“低级组件”,而我只是无法理解它们如何不依赖于“抽象” "即在他们实现的接口上,不管包含的包StringReader
StringWriter
ConcreteStringReader
ConcreteStringWriter
显然,从代码组织的角度来看,将实现与其接口放在同一个包中可能不是最好的,但是这如何违反上面的逐字 DIP 定义取决于抽象目前超出我的理解
也许对该主题有更深入理论知识的人可以在这里帮助我