Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 返回列表的工厂模式_Java_Design Patterns_Factory Pattern_Pluggable - Fatal编程技术网

Java 返回列表的工厂模式

Java 返回列表的工厂模式,java,design-patterns,factory-pattern,pluggable,Java,Design Patterns,Factory Pattern,Pluggable,在我的程序中,我在几个服务器上同时上传一个文件,比如GoogleDrive、dropbox等等。我使用适配器设计模式来适应每个服务器api,因此每个服务器具体类实现一个文件服务器接口,最后我有一个文件服务器对象列表。我的问题:由于我的程序将来必须支持新服务器,封装所有服务器对象实例化(我是说,“…=新…”部分)的最佳方式是什么?我想到的是工厂模式,但是在工厂方法中返回列表是否正确?谢谢。通常工厂模式封装了从某种“材料”(如规格)创建单个对象背后的复杂性。例如,给定URL,创建到URL定义的服务器

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

通常工厂模式封装了从某种“材料”(如规格)创建单个对象背后的复杂性。例如,给定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.
List fsList=new ArrayList();
用于(FSSpec规范:文件服务器规范)
{
FileServer fs=FileServerFactory.create(spec);
fsList.add(fs);
}
//对文件服务器列表执行一些操作。

这也是更可重用的,因为在某些情况下,您可能希望从规范创建单个文件服务器,而无需费心创建带有该规范的单个项目列表,以便传递给您的工厂方法。

谢谢@ireder的回答。但是我看不到我的服务器的任何规范,因为我不知道代码中的服务器细节,只知道它将实现文件服务器接口。我可能知道服务器名称/类,然后将其作为规范发送,但我从哪里获得所有受支持的服务器名称/类、文本文件/单例枚举?再次感谢您。您可以向工厂提供一个不同文件服务器实现的列表,如果您认为它很少会改变,可以通过硬编码,如果您需要更多地控制列表中的内容,可以通过“设置”静态方法注入。好的,现在就知道了。非常感谢。