涉及第三方库

时间:2017-12-19 14:18:04

标签: java design-patterns

假设有第三方库包含基类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或显式类型转换,我怎样才能实现这一点。我尝试过使用访客模式但无法表达它。

2 个答案:

答案 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();
    }

}

所以这里真的没有转换 - 只包装第三方类型,并为下游使用提供一个通用(希望更简单)的界面。