我想以一定的灵活性设计应用程序的文件存储部分,因此可以将文件存储在S3或Web服务器的硬盘上。
我还希望这在每个用户的基础上变得灵活,因此在用户设置中,他们可以选择是将文件存储在S3还是存储在服务器文件系统中。
我在考虑这样的事情:
IFileStorage fs = FileStorageFactory.Instance(userSettings);
然后我会有一个看起来像这样的方法:
public static IFileStorage Instance(UserSettings setting)
{
if(setting == UserSettings.S3)
return new S3FileStorage();
}
这有意义吗? (我是一名c#程序员,但我会用Java做这件事)
我正在使用Spring,但我不认为DI会在这里使用,因为实现会根据每个用户进行更改。
答案 0 :(得分:2)
工厂和依赖注入不是互斥的。 Spring有所谓的factory-method生产豆类。您可以将参数传递给factory-method,它可以是静态的也可以是非静态的。
答案 1 :(得分:1)
是。这似乎是合适的。您正在向用户返回类的特定实例,因此只要他们的要求在程序中途没有变化,那么工厂是合适的(否则我建议{{ 3}}模式)