java - 从处理程序获取结果的最佳方式

标签 java

我有一个关于处理程序的问题。有没有标准的方法可以从他们那里得到结果? 例如我有这样的处理程序接口(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/

相关文章:

java - 为什么 File 类中的 list() 返回共享同一父文件夹的文件夹列表

java - 尝试显示计时器计数,drawString 方法无法正常工作

java - Jhipster gateway 需要完全身份验证才能访问此资源

java - 如何使用JavaMail从Google Mail(Gmail)中读取带有多个标签的邮件?

java - ImageView不显示图像

java - 需要一对多关系设计的帮助

java - 原始数据类型在 Java 中是原子的

java - 如何使用对象的原始类来转换引用?

java - 如何在一定时间后停止tomcat处理请求?

java - Spring Integration DSL 自定义错误 channel 与执行器的问题