java - 如何避免很多 if else 条件

标签 java if-statement refactoring

我已经阅读了很多关于代码重构和避免 if else 语句的主题。实际上,我有一门课使用了很多 if - else 条件。

更多细节:我正在使用拉解析器,在我的肥皂响应的每一行,我会检查是否有我感兴趣的标签,如果没有,检查另一个标签等:

 if(eventType == XmlPullParser.START_TAG) {
            soapResponse= xpp.getName().toString();
            
            if (soapResponse.equals("EditorialOffice")){  
                eventType = xpp.next();
                if (xpp.getText()!=null){
                editorialOffice += xpp.getText();
                }
            }   
            else if (soapResponse.equals("EditorialBoard")){  
                eventType = xpp.next();
                if (xpp.getText()!=null){
                editorialBoard += xpp.getText();
                }
            }
            else if (soapResponse.equals("AdvisoryBoard")){  
                eventType = xpp.next();
                if (xpp.getText()!=null){
                advisoryBoard += xpp.getText();
                }
            }   
        }
        eventType = xpp.next();
     }

现在,我想使用其他东西,而不是那些 if else 条件,但我不知道是什么。

你能举个例子吗?

最佳答案

尝试查看策略模式。

  • 创建一个接口(interface)类来处理响应(IMyResponse)
    • 使用此 IMyResponse 创建 AdvisoryBoardResponse、EditorialBoardResponse 类
  • 创建一个字典,以 soapresponse 值作为键,将您的策略​​作为值
  • 然后你可以通过从字典中获取 IMyResponse 类的方法来使用它

小例子:

// Interface
public interface IResponseHandler {
   public void handleResponse(XmlPullParser xxp);

}

// Concrete class for EditorialOffice response
private class EditorialOfficeHandler implements IResponseHandler {
   public void handleResponse(XmlPullParser xxp) {
       // Do something to handle Editorial Office response
   }
}

// Concrete class for EditorialBoard response
private class EditorialBoardHandler implements IResponseHandler {
   public void handleResponse(XmlPullParser xxp) {
       // Do something to handle Editorial Board response
   }
}

在您需要创建处理程序的地方:

Map<String, IResponseHandler> strategyHandlers = new HashMap<String,IResponseHandler>();
strategyHandlers.put("EditorialOffice", new EditorialOfficeHandler());
strategyHandlers.put("EditorialBoard", new EditorialBoardHandler());

您收到回复的地点:

IResponseHandler responseHandler = strategyHandlers.get(soapResponse);
responseHandler.handleResponse(xxp);

关于java - 如何避免很多 if else 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10175805/

相关文章:

java - 更新: Problem with executing SQL query from Java

java - Appium Java TestNG Framework>使用 appium main.js 文件通过 Mac 空点异常以编程方式启动 Appium

用平均值替换 R 中的缺失值

java - 重构批量完成的文本文件解析

java - 保留 SOAP 结果的排序顺序

python - 无法修改 python 列表中的字段

c++ - 如果满足嵌套条件,计算结果不显示结果 C++

swift - 在 Swift 中重构代码

oop - 函数式编程中的重构是否比 OOP 中的重构更困难?

java - JUnit测试: How to test for nested Exeption?