Использование шаблона стратегии для поддержки загрузки файла из нескольких источников

Я работаю над проектом веб-приложения, который требует от меня рефакторинга функции загрузки файлов. Наша функция загрузки файлов поддерживает несколько источников загрузки файлов, таких как git repo, nexus URL, zip-файлы, и мы также хотим поддерживать больше, таких как поневоле в будущем. В текущей реализации приложение имеет несколько конечных точек для обработки различных методов, таких как getNexusFile(), getGitFile(), getZipFile(); в каждом методе есть реализация для извлечения файлов из указанного источника.

Моя идея состоит в том, чтобы объединить все эти методы в один метод под названием getUploadFile() с помощью шаблона стратегии. Как и в шаблоне «Стратегия», алгоритмы можно было выбирать во время выполнения, поэтому файлы, загруженные из разных источников, могли обрабатываться безразлично после того, как я укажу правильную стратегию. Для каждого источника я создам стратегию.

У меня вопрос: является ли это хорошей практикой шаблона проектирования? Есть ли лучший подход к моделированию этого вопроса?


person Larry Li    schedule 25.02.2017    source источник


Ответы (1)


Шаблон стратегии является допустимым подходом к этой проблеме.

Class SomeClass {
  private FileUploader fileUploader;
}

Interface FileUploader {
     public void uploadFile();
}

Class GitFileUploader implements FileUploader{
     public void uploadFile() {//Implementation for Git File Upload}
}

Class NexusFileUploader implements FileUploader {
     public void uploadFile() { //Implementation for Nexus }
}

При необходимости вы можете добавить дополнительные реализации FileUploader.

person Amit G.    schedule 25.02.2017
comment
Это имеет смысл только в том случае, если конкретный FileUploader не изменяется в течение всего времени существования объекта SomeClass. Если ожидается, что один объект SomeClass будет загружать разные файлы из разных источников, более подходящим может быть использование метода фабрики или абстрактной фабрики. - person Frank Puffer; 25.02.2017