Это идеальная проблема для заводского образца? - PullRequest
1 голос
/ 27 февраля 2010

Я хочу спроектировать часть хранилища файлов моего приложения с некоторой гибкостью, чтобы можно было хранить файлы либо на S3, либо на жестком диске веб-сервера.

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

Я думаю о чем-то вроде этого:

IFileStorage fs = FileStorageFactory.Instance(userSettings);

Тогда у меня будет метод, который выглядит следующим образом:

public static IFileStorage Instance(UserSettings setting)
{
     if(setting == UserSettings.S3)
         return new S3FileStorage();
}

Имеет ли это смысл? (Я программист на C #, но я буду делать это на Java)

Я использую Spring, но я не думаю, что здесь будет использоваться DI, поскольку реализация меняется для каждого пользователя.

Ответы [ 2 ]

2 голосов
/ 27 февраля 2010

Factory и Dependency Injection не являются взаимоисключающими. Spring имеет так называемый фабричный метод , который производит бобы. Вы можете передавать аргументы фабричному методу, который может быть статическим или нестатическим.

1 голос
/ 27 февраля 2010

Да. Это кажется уместным. Вы возвращаете конкретный экземпляр класса пользователю, так что, если его требования не меняются на полпути через программу, то фабрика является подходящей (в противном случае я бы порекомендовал стратегия паттерн)

...