Принцип инверсии зависимостей (Dependency Inversion Principle, DIP). Он гласит, что:
Этот принцип направлен на уменьшение связанности между компонентами системы, делая их более гибкими и легко тестируемыми. Вместо прямой зависимости от конкретной реализации, компоненты зависят от интерфейсов или абстрактных классов.
Пример без DIP:
java
Пример с DIP:
java
В примере с DIP, DataProcessor (высокоуровневый модуль) зависит от интерфейса DataSaver (абстракция), а не от конкретной реализации Database (низкоуровневый модуль). Database и FileSaver (детали) зависят от той же абстракции DataSaver. Это позволяет легко менять низкоуровневые реализации без изменения высокоуровневых модулей.