4

在我的程序中,我将一个文件同时上传到多个服务器,例如 google drive、Dropbox 等。我正在使用适配器设计模式来适配每个服务器 api,因此每个服务器具体类都实现了一个FileServer接口,最后我有一个 FileServer 对象列表。我的问题:由于我的程序将来必须支持新服务器,封装所有服务器对象实例化的最佳方法是什么(我的意思是,“...= new...”部分)?想到的是工厂模式,但是在工厂方法中返回一个列表是否正确?谢谢你。

4

1 回答 1

5

通常,工厂模式封装了从某种“材料”(如规范)创建单个对象背后的复杂性。例如,给定一个 URL,创建一个到由 URL 定义的服务器的连接。

在您的情况下,规范工厂模式将为文件存储(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.

这也更具可重用性,因为在某些情况下,您可能希望根据规范创建单个文件服务器,而无需创建仅包含该规范的单项列表以传递给您的工厂方法。

于 2013-11-22T03:21:52.607 回答