2013-11-22 5 views
2

В моей программе я загружаю один файл на несколько серверов, например, на Google, Dropbox и так далее. Я использую шаблон проектирования адаптера для адаптации каждого сервера api, поэтому каждый конкретный класс сервера реализует интерфейс FileServer, а в конце у меня есть список объектов FileServer. Мой вопрос: как моя программа должна будет поддерживать новые серверы в будущем, Каков наилучший способ инкапсуляции всех экземпляров объектов сервера (я имею в виду, часть «... = новый ...»)? Что имеет в виду заводской шаблон, но Правильно ли вернуть список в заводском методе? Спасибо.Заводской шаблон для возврата списка

ответ

4

Обычно заводская схема инкапсулирует сложность создания одного объекта из каких-то «материалов», например, спецификации. Например, с учетом 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. 

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

+0

Спасибо @Ireeder за ответ. Но я не вижу каких-либо спецификаций для своих серверов, потому что я не знаю деталей сервера в коде, просто знаю, что он будет реализовывать интерфейс FileServer. Я могу узнать имя/класс сервера, а затем отправить его как спецификацию, но где я могу получить все поддерживаемые имена серверов/классы, текстовый файл/одиночный enum, возможно? Еще раз спасибо. –

+1

Вы можете предоставить фабрике список различных реализаций FileServer, либо с помощью жесткого кодирования, если вы считаете, что это редко изменится, либо вводит их через статический метод «setup», если вам нужно больше контролировать то, что в списке. – lreeder

+0

Хорошо, понял. Спасибо. –

Смежные вопросы