是否存在具有不同数量的输入/输出,但核心工作职责相同的模式?

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)

任何已知的模式或关于如何做到这一点的建议将不胜感激!

Bah*_*man 0

你的输出结果可能是抽象的,你总是返回它

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)