Dependency Inversion Principle
Интерактивное демо «Dependency Inversion Principle» — раздел Энциклопедия · Код и разработка.
🔄 Принцип инверсии зависимостей (DIP)
Высокоуровневый модуль (Switch) зависит от абстракции Switchable, а не от конкретных устройств.
🔌 Switchвысокоуровневый модуль
зависит от ↓📄 SwitchableturnOn() · turnOff() · isOn()
реализуют ↓низкоуровневые деталиУстройство (Switchable)
💡
Лампочка⛔ ВыключеноSwitch(Switchable device) — можно подставить любое устройство, в том числе mock для тестов.
Пример кода
// Высокоуровневый модуль зависит от абстракции
interface Switchable {
boolean isOn();
void turnOn();
void turnOff();
}
class Switch {
private final Switchable device;
Switch(Switchable device) {
this.device = device;
}
void toggle() {
if (device.isOn()) device.turnOff();
else device.turnOn();
}
}
// Любая реализация — Fan, Radio, Heater…
Switch s = new Switch(new Radio());🔌Гибкость — Switch не меняется при добавлении устройств
🧩Расширяемость — Новый класс — только implements Switchable
🧪Тестируемость — В тестах подставляется MockSwitchable