Ant*_*ony 5 java abstract-class abstraction design-patterns
我的代码库中有一个模式,看起来很像这样:我们正在处理来自队列的消息,然后将该消息传递到下一个队列。到目前为止的用例是我们处理和生成相同类型的消息。
public interface Processor<T> {
T process(T thing);
}
Run Code Online (Sandbox Code Playgroud)
该用例已演变为处理和生成不同类型的用例。此外,我们可能需要处理一种类型并生产一系列其他类型。
所以像:
public interface NewProcessor<I, O> {
O process(I thing;)
}
Run Code Online (Sandbox Code Playgroud)
并且将来可能需要类似的东西
public interface FutureProcessor<I, O1, O2> { //potentially N number of O
Pair<O1, O2> process(I thing);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:有没有办法比拥有三个单独的类更清晰地表达这种情况?我可以在这里使用一个很好的已知层次结构吗?
我们有第一种处理器的抽象用户,我希望每次添加新处理器时不必重新编写。它今天做了这样的事情:
public abstract AbstractModule<T> {
private Processor<T> processor;
public AbstractModule(Processor<T> processor) {
this.processor = processor;
}
T runModule(T input) {
// abstract validateInput(input);
T result = processor.process();
// record results
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
任何已知的模式或关于如何做到这一点的建议将不胜感激!
你的输出结果可能是抽象的,你总是返回它
class Result<T1, T2, T3>{// only change Result class
boolean hasType1 //no need to change method interface that returns Result
boolean hasType2
boolean hasType3
T1 t1
T2 t2
T3 t3
// you can use other implementation such as array...
}
public interface Processor<T> {//only one interface that always returns Result
Result process(T thing);
}
Run Code Online (Sandbox Code Playgroud)