我有多个服务使用一种方法实现接口 - execute(). 每个服务都使用此方法根据字符串值执行一些操作,在原始代码中,该值是枚举,因此这些值是常量。
interface Service{
public void execute();
}
class Service1 implements Service{
//constructors
public void execute(JSONObject payload, String payloadType){
if(payloadType.equals("type1")){
doSomething(payload);
}
}
}
class Service2 implements Service{
//constructors
public void execute(JSONObject payload, String payloadType){
if(payloadType.equals("type1")){
doSomething1(payload);
}
if(payloadType.equals("type2")){
doSomething2(payload);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想避免每次创建新服务时都编写相同的 if 语句。问题是,每个服务不必根据每个字符串类型执行操作。所以Service1在type等于"type1"时执行action,而Service2根据"type1"和"type2"执行action。
我尝试了以下解决方案:
class Main {
public static void main(String[] args) {
exec(new B(), "type2");
}
private static void exec(Service service, JSONObject payload, String payloadType){
if(payloadType.equals("type1")){
Init i = (Init)service;
i.init(payload);
}
if(payloadType.equals("type2")){ …Run Code Online (Sandbox Code Playgroud)