1

我想以一定的灵活性设计我的应用程序的文件存储部分,以便可以将文件存储在 S3 或 Web 服务器的硬盘上。

我还希望这在每个用户的基础上都是灵活的,因此在他们的用户设置中,他们可以选择是否要将他们的文件存储在 S3 或服务器文件系统中。

我在想这样的事情:

IFileStorage fs = FileStorageFactory.Instance(userSettings);

然后我会有一个看起来像这样的方法:

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

这有意义吗?(我是 ac# 程序员,但我将在 Java 中执行此操作)

我正在使用 Spring,但我认为这里不会使用 DI,因为每个用户的实现都会发生变化。

4

2 回答 2

2

工厂和依赖注入并不是相互排斥的。Spring 具有生产 bean的所谓工厂方法。您可以将参数传递给工厂方法,它可以是静态的或非静态的。

于 2010-02-27T19:34:28.100 回答
1

Yes. That seems appropriate. You're returning a particular instance of a class to the user, so as long as their requirements don't change halfway through the program, then the factory is appropriate (otherwise I'd recommend a strategy pattern)

于 2010-02-27T19:22:07.533 回答