if (type.equalsIgnoreCase("Android")) {
return new AndroidApi;
} else if (type.equalsIgnoreCase("iOS")) {
return new IosAPi;
} else if (type.equalsIgnoreCase("Windows")) {
return new WindowsApi;
}我如何创建对象而不是如果有20个端点在那里。
发布于 2019-02-23 15:48:35
您可以将API实现的类型和供应商放在映射中,如下所示:
public static final Map<String, Supplier<Api>> supplierMap = Map.of(
"android", AndroidApi::new,
"ios", IosApi::new,
"windows", WindowsApi::new
);
public static Api getApi(String type) {
return supplierMap.get(type.toLowerCase()).get();
}假设它们都实现了一个接口。您可以这样调用上面的方法:
Api api = getApi("Android");发布于 2019-02-23 15:44:08
您可以使用工厂设计模式。
interface OperatingSystem
{
void runProcess();
}
class AndroidApi implements OperatingSystem {
public void runProcess() {
// TODO Auto-generated method stub
}
}
class IosAPi implements OperatingSystem {
public void runProcess() {
// TODO Auto-generated method stub
}
}
class WindowsApi implements OperatingSystem {
public void runProcess() {
// TODO Auto-generated method stub
}
}
class OSFactory
{
static OperatingSystem getOPApi(String type){
if (type.equalsIgnoreCase("Android")) {
return new AndroidApi();
} else if (type.equalsIgnoreCase("iOS")) {
return new IosAPi();
} else if (type.equalsIgnoreCase("Windows")) {
return new WindowsApi();
}
return null;
}
}
public class Client{
public static void main(String[] args) {
OperatingSystem os=OSFactory.getOPApi("Android");
}
}发布于 2019-02-23 16:07:47
可以,您可以使用工厂设计模式或Java反射API来完成此操作。使用Java反射API,我们可以做类似下面的事情:
为这里提到的所有Api类创建一个基类。考虑基类为public abstract class BaseApi。
HashMap<String,String> map = new HashMap<String,String>();
map.put("Android","AndroidApi");
map.put("iOS","IosApi");
map.put("Windows","WindowsApi");
public static BaseApi getInstance(String type){
BaseApi obj = (BaseApi)Class.forName(type).newInstance();
return obj;
}https://stackoverflow.com/questions/54839264
复制相似问题