Play IT

Dependency Inversion Principle

Интерактивное демо «Dependency Inversion Principle» — раздел Энциклопедия · Код и разработка.

code-devencyclopedia

🔄 Принцип инверсии зависимостей (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