Tag: 责任链

Java Generics:将通用函数对象链接在一起

我一直在努力解决以下问题。 我有一系列函数对象,每个函数对象都有自己的输入和输出类型,通过java中的generics类型参数定义。 我想在链中安排这些,以便将原始数据输入到第一个函数,转换为输出类型,这是下一个对象的输入类型,依此类推。 当然这对于硬编码来说是微不足道的,但是我想让代码可以插入到新的函数对象中。 如果我只是省略类型参数(只有最终输出类型),这就是事情的样子: public T process() { Iterator it = source.provideData(); for(Pipe pipe : pipeline) { it = pipe.processIterator(it); } return sink.next(it); } 这里,数据上的迭代器在函数对象之间传递,上下文应该是Context。 有没有办法保持以下类型的管道可插拔,仍然保持类型安全? 编辑:为清楚起见,我有一系列function对象,管道。 每个都将特定类型作为输入,并输出另一种类型。 (实际上是这些类型的迭代器)这些将被链接在一起,例如, Pipe -> Pipe -> Pipe -> … ,以便输出一个pipe是下一个管道的输入类型。 这里还有一个源,它输出一个类型为A的迭代器,以及一个接受类型的接收器(过去管道的输出)。 这会让事情更清楚吗? 问题是,因为输入和输出类型的兼容性存在严重依赖性,有没有办法确保这一点? 我开始认为将函数对象插入管道可能是确保类型安全的最佳时间,但我不知道如何做到这一点。 编辑2:我有一个函数对象的加法器方法,目前如下所示: public void addPipe(Pipe pipe) { pipeline.add(pipe); } 我想检查第一个类型参数是否与当前管道的“结束”相同,如果不是则抛出exception? 我不认为有一个很好的方法来获得编译时安全性。 然后可以将当前管道的“结束”设置为输入管道的第二个类型参数。 我想不出如何用generics来做这件事,并且传递类信息似乎很可怕。

对于一个大的validation任务是责任链模式的一个好赌注?

我需要构建一个过程,它将根据~200个validation规则validation记录。 记录可以是~10种类型中的一种。 从validation规则到记录类型存在一些细分,但存在大量重叠,这使我无法对validation规则进行干净整理。 在我的设计过程中,我正在考虑所有validation规则的责任链模式。 这是一个好主意还是有更好的设计模式?