Sobes.tech
Назад к вопросам
Middle
6

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); } } } }

Компании, где спрашивали
экзон

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

sobes.tech AI

В представленном коде реализован паттерн стратегия для обработки разных типов документов. Есть интерфейс 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);
    }
}

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