Sobes.tech
Назад к вопросам
Junior — Middle
65

Можешь привести пример идеи инвертирования зависимостей в проектировании программных систем?

Компании, где спрашивали
ОТП БанкОТП Банк

Ответ от нейросети

sobes.tech AI

Идея инвертирования зависимостей (Dependency Inversion Principle) заключается в том, что высокоуровневые модули не должны зависеть от низкоуровневых, а оба должны зависеть от абстракций (например, интерфейсов). Это позволяет снизить связанность и повысить гибкость кода.

Пример на Java:

interface MessageSender {
    void send(String message);
}

class EmailSender implements MessageSender {
    public void send(String message) {
        System.out.println("Sending email: " + message);
    }
}

class NotificationService {
    private MessageSender sender;

    public NotificationService(MessageSender sender) {
        this.sender = sender;
    }

    public void notifyUser(String message) {
        sender.send(message);
    }
}

// Использование:
MessageSender emailSender = new EmailSender();
NotificationService service = new NotificationService(emailSender);
service.notifyUser("Hello!");

Здесь NotificationService зависит не от конкретной реализации EmailSender, а от абстракции MessageSender. Это позволяет легко менять способ отправки сообщений без изменения сервиса.