Ответ
Инверсия управления (IoC) — это принцип проектирования, при котором управление созданием и связыванием объектов делегируется внешнему контейнеру (фреймворку), а не реализуется внутри самого класса. Это уменьшает связанность кода.
Пример с такси: Без IoC клиент сам управляет процессом: находит службу, вызывает такси, контролирует выполнение. С IoC клиент лишь декларирует потребность ("мне нужно такси"), а внешний сервис (контейнер) управляет всем процессом: подбирает машину, назначает водителя, строит маршрут.
Пример кода на Java (Spring):
// Без IoC: клиент сам создает и управляет зависимостью.
TaxiService taxi = new YandexTaxiService();
taxi.orderRide("Airport");
// С IoC (через Dependency Injection): контейнер внедряет зависимость.
@Component
public class ClientService {
@Autowired // Spring IoC контейнер предоставит реализацию.
private TaxiService taxiService;
public void goToAirport() {
taxiService.orderRide("Airport");
}
}
Ключевые моменты:
- TaxiService — это абстракция (интерфейс).
- Конкретная реализация (YandexTaxiService, UberService) определяется и управляется контейнером IoC (например, Spring ApplicationContext).
- Клиентский код зависит от абстракции, а не от конкретного класса, что упрощает тестирование и модификацию.