public class RefEx {

В представленном коде реализован паттерн стратегия для обработки разных типов документов. Есть интерфейс DocumentProcessor (не показан, но подразумевается), который реализуют конкретные процессоры для PDF, DOCX и XML.

Короткий ответ

Что ответить на собеседовании

В представленном коде реализован паттерн стратегия для обработки разных типов документов. Есть интерфейс DocumentProcessor (не показан, но подразумевается), который реализуют конкретные процессоры для PDF, DOCX и XML.

Подробный разбор

Ответ с пояснениями

Условие

public class RefEx { public static class PdfProcessor implements DocumentProcessor { }

public static class DocxProcessor implements DocumentProcessor {
    @Override
    public void process(Document document) {
        // Специфическая логика для обработки Word
    }
}

public static class XmlProcessor implements DocumentProcessor {
    @Override
    public void process(Document document) {
        // Специфическая логика для обработки XML
    }
}

public static class DocumentService {
    private final Map<DocumentType, DocumentProcessor> processors = Map.of(
        DocumentType.PDF, new PdfProcessor(),
        DocumentType.DOCX, new DocxProcessor(),
        DocumentType.XML, new XmlProcessor()
    );

    public void process(Document[] documents) {
        for (Document doc : documents) {
            DocumentProcessor processor = processors.get(doc.type);
            if (processor == null) {
                break;
            }
            // Общая логика обработки документа

            processor.process(doc);
        }
    }
}

}

Ответ

В представленном коде реализован паттерн стратегия для обработки разных типов документов. Есть интерфейс DocumentProcessor (не показан, но подразумевается), который реализуют конкретные процессоры для PDF, DOCX и XML.

В классе DocumentService хранится словарь processors, где ключ — тип документа, а значение — соответствующий процессор. Метод process перебирает массив документов, выбирает нужный процессор по типу и вызывает его метод process.

Такой подход позволяет легко расширять поддержку новых форматов, добавляя новые классы процессоров и обновляя мапу. Общая логика обработки вынесена в сервис, а специфичная — в отдельные классы.

Пример интерфейса и использования:

public interface DocumentProcessor {
    void process(Document document);
}

// В DocumentService
public void process(Document[] documents) {
    for (Document doc : documents) {
        DocumentProcessor processor = processors.get(doc.type);
        if (processor == null) {
            break; // или можно выбросить исключение
        }
        // Общая логика
        processor.process(doc);
    }
}

Это классический пример использования полиморфизма и инверсии управления для гибкой архитектуры.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее