В своей программе я загружаю один файл на несколько серверов, например, гугл диск, дропбокс и так далее одновременно. Я использую шаблон проектирования адаптера для адаптации API каждого сервера, поэтому каждый конкретный класс сервера реализует интерфейс FileServer, и в конце у меня есть список объектов FileServer. Мой вопрос: поскольку моя программа должна будет поддерживать новые серверы в будущем, как лучше всего инкапсулировать все экземпляры этих серверных объектов (я имею в виду часть "...= new...")?< /strong> На ум приходит фабричный шаблон, но правильно ли возвращать список в фабричном методе? Спасибо.
Заводской шаблон для возврата списка
Ответы (1)
Обычно фабричный шаблон инкапсулирует сложность создания одного объекта из какого-то «материала», такого как спецификация. Например, имея 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.
Это также более удобно для повторного использования, потому что вероятны ситуации, когда вы хотите создать один файловый сервер из спецификации, не беспокоясь о создании списка из одного элемента только с этой спецификацией для передачи в ваш фабричный метод.