假设有第三方库包含基类Transformer和具体实现TransformerA和TransformerB。
我需要为TransformerA和TransformerB输出类编写并行类,比如TransformerNew
public class TransformerAConverter {
public TransformerNew convert(TransformerA transformerA) {
// conversion logic
}
}
public class TransformerBConverter {
public TransformerNew convert(TransformerB transformerB) {
// conversion logic
}
}
我需要编写以下功能:
public TransformerNew[] process(Transformer[] transformers) {
}
如果没有instanceof或显式类型转换,我怎样才能实现这一点。我尝试过使用访客模式但无法表达它。
答案 0 :(得分:0)
我建议你在这里使用Strategy
模式。这两个变形金刚将是变形金刚strategy
。您可以像这样组织代码。 Visitor
不适合此处,因为它用于将遍历逻辑与下面的数据结构或表示分离。
public class TransformerConverter {
private final Transformer transformerStrategy,
public TransformerConverter(Transformer strategy) {
this.transformerStrategy = strategy;
}
public TransformerNew convert() {
// use the strategy to achieve the conversion.
}
}
答案 1 :(得分:0)
从评论中 - 听起来像Facade模式可能很有用。例如,给定此接口:
public interface TransformerNew {
public int getInterestingValue();
}
然后有一些实现:
public class TransformerNewA implements TransformerNew {
private final TransformerA a;
public TransformerNewA(TransformerA a) {
this.a = a;
}
public int getInterestingValue() {
return a.getSomeValue() + a.getSomeOtherValue();
}
}
和
public class TransformerNewB implements TransformerNew {
private final TransformerB b;
public TransformerNewB(TransformerB b) {
this.b = b;
}
public int getInterestingValue() {
return b.getFirstPart() + b.getSecondPart();
}
}
所以这里真的没有转换 - 只包装第三方类型,并为下游使用提供一个通用(希望更简单)的界面。