В моей программе я загружаю один файл на несколько серверов, например, на Google, Dropbox и так далее. Я использую шаблон проектирования адаптера для адаптации каждого сервера api, поэтому каждый конкретный класс сервера реализует интерфейс FileServer, а в конце у меня есть список объектов FileServer. Мой вопрос: как моя программа должна будет поддерживать новые серверы в будущем, Каков наилучший способ инкапсуляции всех экземпляров объектов сервера (я имею в виду, часть «... = новый ...»)? Что имеет в виду заводской шаблон, но Правильно ли вернуть список в заводском методе? Спасибо.Заводской шаблон для возврата списка
ответ
Обычно заводская схема инкапсулирует сложность создания одного объекта из каких-то «материалов», например, спецификации. Например, с учетом URL-адреса, создайте соединение с сервером, определенным URL-адресом.
В вашем случае канонический шаблон Factory примет некоторые спецификации для хранилища файлов (URL, контекстный объект и т. Д.) И создаст объект с одним файловым сервером. Хотя нет ничего, что запрещало бы вам возвращать список объектов с заводского метода, учитывая список спецификаций, это почти так же просто и, возможно, более чистое, чтобы перебирать список спецификаций и вызывать заводский метод для каждого из них. Что-то вроде этого:
List<FileServer> fsList = new ArrayList<FileServer>();
for(FSSpec spec : fileServerSpecs)
{
FileServer fs = FileServerFactory.create(spec);
fsList.add(fs);
}
// do something with your list of file servers.
Это также более многоразовое, потому что вероятно ситуаций, когда вы хотите, чтобы создать единый файловый сервер из спецификации, не беспокоясь о создании списка одного элемента с только что спецификации перейти к ваш заводской метод.
- 1. Общий шаблон и заводской шаблон
- 2. Заводской шаблон заводского шаблона
- 3. Заводской шаблон динамический подход
- 4. TDD и заводской шаблон
- 5. параметризованный заводской метод шаблон
- 6. Заводской метод шаблон
- 7. Как реализовать заводской шаблон?
- 8. Заводской шаблон в C#
- 9. заводской шаблон андроида
- 10. Понимание Аннотация Заводской шаблон
- 11. Создать заводской шаблон
- 12. Заводской шаблон для безопасности на основе ролей
- 13. Почему не заводской шаблон для сортировки?
- 14. Заводской шаблон для пользовательских элементов управления
- 15. Когда использовать абстрактный заводской шаблон?
- 16. шаблон усадки смешивания и заводской шаблон
- 17. Заменяет ли шаблон Builder заводской шаблон?
- 18. Как реализовать единый заводской шаблон?
- 19. , когда использовать абстрактный заводской шаблон?
- 20. Объект заводской шаблон в node.js
- 21. Заводской шаблон с внешней зависимостью
- 22. Тип литья и заводской шаблон
- 23. страница заводской шаблон и выпадающий список
- 24. Заводской шаблон с статическим методом или конструктором
- 25. Доступ к заводской службе после возврата обещания
- 26. Как вызвать метод заводской функции внутри возврата?
- 27. CDI @ApplicationScoped vs @RequestScoped и заводской шаблон
- 28. Заводская модель и абстрактный заводской шаблон
- 29. Заводской шаблон в библиотеке, позволяющий регистрировать реализации
- 30. Как реализовать статический заводской шаблон в C++
Спасибо @Ireeder за ответ. Но я не вижу каких-либо спецификаций для своих серверов, потому что я не знаю деталей сервера в коде, просто знаю, что он будет реализовывать интерфейс FileServer. Я могу узнать имя/класс сервера, а затем отправить его как спецификацию, но где я могу получить все поддерживаемые имена серверов/классы, текстовый файл/одиночный enum, возможно? Еще раз спасибо. –
Вы можете предоставить фабрике список различных реализаций FileServer, либо с помощью жесткого кодирования, если вы считаете, что это редко изменится, либо вводит их через статический метод «setup», если вам нужно больше контролировать то, что в списке. – lreeder
Хорошо, понял. Спасибо. –