Sobes.tech
Назад к вопросам
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. Такой подход улучшает тестируемость и расширяемость кода.