我有一个关于处理程序的问题。有没有标准的方法可以从他们那里得到结果? 例如我有这样的处理程序接口(interface)(Java):
interface SomeHandler {
void handleData(Object data);
}
它的实现:
public class MyHandler implements SomeHandler {
@Override
public void handleData(Object data){
//Some actions
}
}
我有一些带有方法的外部类,它请求一个处理程序来解析它的结果。这个类是某些API的一部分,所以我无法重写它。
public class SomeClass{
public void getResults(SomeHandler handler){
Object[] dataArray = loadData();
for(Object dataItem : dataArray){
handler.handleData(dataItem);
}
}
private Object[] loadData(){
//Some internal actions
}
}
那么,从该处理程序收集数据的最佳方式是什么?
我有两个想法:
1)
public class MyFirstHandler implements SomeHandler {
private List<Object> result = new ArrayList<Object>();
@Override
public void handleData(Object data){
result.add(data);
}
public List<Object> getResult(){
return result;
}
}
使用示例:
SomeClass someClass = //received from some external code
MyFirstHandler handler = new MyFirstHandler();
someClass.getResults(handler);
List<Object> result = handler.getResult();
2)
public class MySecondHandler implements SomeHandler {
private List<Object> resultContainer;
public MySecondHandler(List<Object> resultContainer){
this.resultContainer= resultContainer;
}
@Override
public void handleData(Object data){
resultContainer.add(data);
}
}
使用示例:
SomeClass someClass = //received from some external code
List<Object> resultContainer = new ArrayList<Object>();
MySecondHandler handler = new MySecondHandler(resultContainer);
someClass.getResults(handler);
//results are in the resultContainer now
哪个最好?或者也许还有其他方法?
最佳答案
由于处理程序仅用于数据收集而没有其他用途(无论如何都应该如此),我会采用第二种方法,但稍作修改
我不使用 List,而是使用更抽象的类型 Collection,因为 Handler 不需要知道如何存储数据,它只需要一个可以在数据出现时存储数据的地方。现在处理程序的客户端可以决定如何存储数据。这将收集数据的关注点与数据实际存储的方式分开。通过这种方法,客户可以拥有更大的灵 active 。
例如,如果它不关心重复数据,它可以使用 HashSet 而不是 ArrayList。或者,如有必要,它可以在获取结果之前添加其他数据。它甚至可以提供 Collection 的自定义实现。
关于java - 从处理程序获取结果的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25247134/