从处理程序获取结果的最佳方法

时间:2014-08-11 15:40:19

标签: java

我对处理程序有疑问。有没有一种标准的方法可以从中得到结果? 例如,我有这样的处理程序接口(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

哪一个最好?或者也许还有其他方式?

1 个答案:

答案 0 :(得分:1)

由于Handler仅用于数据收集而没有其他任何东西(无论如何应该),我会选择第二种方法,但稍作修改

我不使用List,而是使用更抽象的类型Collection,因为Handler不需要知道如何存储数据,它只需要一个可以存储数据的地方。现在,Handler的客户端可以决定它希望如何存储数据。这将收集数据的关注与数据实际存储的方式分开。通过这种方法,客户端可以更灵活。

因此,例如,如果它不关心重复数据,它可以使用HashSet而不是ArrayList。或者,如果需要,它可以在获得结果之前添加其他数据。它甚至可以提供Collection的自定义实现。