我已经阅读了很多关于代码重构和避免 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/