1280. Что такое Dependency Inversion Principle (Принцип инверсии зависимостей)?
Dependency Inversion Principle (Принцип инверсии зависимостей) - это принцип SOLID, который гласит, что абстракции не должны зависеть от деталей, а детали должны зависеть от абстракций. То есть, высокоуровневые модули не должны зависеть от низкоуровневых, а должны зависеть от абстракций, которые могут быть реализованы как в низкоуровневых, так и в высокоуровневых модулях.
Пример на Java:
public interface MessageSender {
void sendMessage(String message);
}
public class EmailMessageSender implements MessageSender {
public void sendMessage(String message) {
// sending email message }
}
public class SmsMessageSender implements MessageSender {
public void sendMessage(String message) {
// sending SMS message }
}
public class NotificationService {
private MessageSender messageSender;
public NotificationService(MessageSender messageSender) {
this.messageSender = messageSender;
}
public void sendNotification(String message) {
messageSender.sendMessage(message);
}
}
public class MyApp {
public static void main(String[] args) {
MessageSender messageSender = new EmailMessageSender();
NotificationService notificationService = new NotificationService(messageSender);
notificationService.sendNotification("Hello World!");
}
}
В этом примере зависимость между NotificationService и MessageSender инвертирована. Мы создаем экземпляр MessageSender вне NotificationService и передаем его через конструктор. Таким образом, NotificationService не зависит от конкретной реализации MessageSender, а зависит только от абстракции MessageSender. Это позволяет нам легко заменять конкретные реализации MessageSender, добавлять новые реализации и тестировать NotificationService независимо от реализации MessageSender.