Описание задачи:
Размышления над реализацией:
- Чтобы не распыляться и сконцентрироваться на решении основной задачи будем создавать все классы в одном файле;
- Из условия следует, что у нас должен быть реализован класс ParserFactory со статическим методом build в который передается путь к обрабатываемому файлу $filePath, что мы и создаем (см. стр. 5,7);
- Для обработки файлов с допустимыми расширениями надо создать соответствующие классы, для каждого расширения свой класс. Имена классов сделаем отличающимися только на концовку - совпадает с расширением файлов, которые будет обрабатывать этот класс (см. стр. 46, 60, 74);
- Общие для всех классов обработчиков файлов методы вынесем в абстрактный класс (см.стр. 28), и будем от него наследоваться. Общими будут: наличие метода import - будет у каждого класса свой, но присутствовать обязан, поэтому абстрактный (см. стр. 33), метод getFile, который будет осуществлять непосредственно загрузку файла, и метод getName - возвращает имя загруженного файла;
- Получение имени класса, объект которого необходимо вернуть при запросе из клиентского кода будет происходить следующим образом:
- - проверяем существует ли файл и можно ли его прочитать (см.стр. 11), если возможно, то берем из пути к файлу расширение (см.стр. 12);
- - если расширение получено и существует, то создаем имя класса, который должен обрабатывать файл с полученным расширением (см. стр. 16);
- - проверка на существование имени класса и самого класса (см.стр. 19) позволяет создать объект этого класса (см.стр. 20) и передать ему путь к обрабатываемому файлу;
- - отсутствие класса или имени выбрасывает исключение (см.стр. 22);
- Основная задача решена. Можно конечно ее усложнить, вынести классы в разные файлы, дополнить файл автозагрузчиком классов, но на решение это уже не повлияет.
Файл с классами: