我有一个通用映射器类,其中有一个方法可以确定应该使用哪个转换器实现。这个指标是一个枚举。该方法如下所示:
private void test() throws Exception {
MyEnum nameEnum = ...
ITransformer myTransformer;
switch (nameEnum) {
case ENUM1:
mytransformer= new TransformerImpl1(this);
mytransformer.doUnmarshal();
break;
case ENUM2:
mytransformer= new TransformerImpl2(this);
mytransformer.doUnmarshal();
break;
case ENUM3:
mytransformer= new TransformerImpl3(this);
mytransformer.doUnmarshal();
break;
...// 40 x
}
}
我知道填充静态映射以避免这样的switch / case语句,但是在这里我必须返回一个类的实例,所以我认为它不会起作用。
我想我也无法提供变换器选择enum本身的信息,因为我必须将MapperClass作为参数提供给变换器实现。
但是我认为必须有一个解决方案来避免这么长的切换/案例陈述,即使在我的情况下,这些类有一个"不太好的"耦合。
答案 0 :(得分:4)
您可以拥有以下内容:
public enum MyEnum {
ENUM1(new TransformerImpl1()),
ENUM2(new TransformerImpl2()),
ENUM3(new TransformerImpl3()),
ENUM4(new TransformerImpl4());
ITransformer myTransformer;
MyEnum(ITransformer myTransformer){
this.myTransformer=myTransformer;
}
public ITransformer getTransformer() {
return this.myTransformer;
}
}
然后获取枚举实例的变换器并执行解压缩
答案 1 :(得分:1)
如果您的变压器具有相同的合同(相同的方法),您可以实施工厂方法模式Check this link。此模式为添加更多功能提供了更大的灵活性