为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Single 方法中为不同的端点创建对象,而不是 java 中的 if 循环

如何在 Single 方法中为不同的端点创建对象,而不是 java 中的 if 循环

浮云间 2022-07-06 16:59:52
if (type.equalsIgnoreCase("Android")) {    return new AndroidApi;} else if (type.equalsIgnoreCase("iOS")) {    return new  IosAPi;} else if (type.equalsIgnoreCase("Windows")) {    return new WindowsApi;}我如何创建对象而不是 if 条件那里有 20 个端点。
查看完整描述

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");


查看完整回答
反对 回复 2022-07-06
?
偶然的你

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");

    }

}


查看完整回答
反对 回复 2022-07-06
?
千万里不及你

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;

}


查看完整回答
反对 回复 2022-07-06
  • 3 回答
  • 0 关注
  • 107 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信