Назад к вопросам
СБЕР
Junior — Middle
71
Могли бы вы привести пример использования принципа инверсии зависимостей в реальной разработке?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Принцип инверсии зависимостей (Dependency Inversion Principle, DIP) говорит, что модули высокого уровня не должны зависеть от модулей низкого уровня напрямую, а оба должны зависеть от абстракций.
Пример на Java:
// Абстракция
public interface MessageService {
void sendMessage(String message);
}
// Конкретная реализация
public class EmailService implements MessageService {
public void sendMessage(String message) {
System.out.println("Sending email: " + message);
}
}
// Класс, зависящий от абстракции, а не от конкретной реализации
public class Notification {
private MessageService service;
public Notification(MessageService service) {
this.service = service;
}
public void notifyUser(String message) {
service.sendMessage(message);
}
}
// Использование
public class Main {
public static void main(String[] args) {
MessageService emailService = new EmailService();
Notification notification = new Notification(emailService);
notification.notifyUser("Hello!");
}
}
Здесь класс Notification зависит от интерфейса MessageService, а не от конкретной реализации EmailService. Это позволяет легко менять реализацию (например, на SMS-сервис) без изменения кода Notification. Такой подход улучшает тестируемость и расширяемость кода.