3 回答
TA贡献1798条经验 获得超3个赞
您可以将 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");
TA贡献1841条经验 获得超3个赞
您可以使用工厂设计模式。
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");
}
}
TA贡献1784条经验 获得超9个赞
是的,您可以使用工厂设计模式或使用 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;
}
添加回答
举报