我尝试设计一台翻译服务器。我的本地系统中有一个 POJO 类 ( RootClass
)。并且还有远程系统将远程对象(RemoteClass
)发送到我的系统。该服务的职责是将 Remote 类转换为 Root 类。问题是:种类太多了。例如超过200种。我需要写大量的 if-else 来做这个翻译:
我列出了一些伪代码来描述这个问题。
public class RootClass {
public String type;
public String attr1;
public String attr2;
public String attr3;
public String attr4;
}
public class RemoteClass {
public String type;
public String attr1;
public String attr2;
public String attr3;
}
public class Translator{
public RootClass translate(RemoteClass remote) {
RootClass root = new RootClass();
if ("a".equals(remote.type )) {
root.type = "veryGood";
if ("one".equals(remote.attr1)) {
root.attr2 = "true";
}
if ("two".equals(remote.attr1)) {
root.attr3 = "true";
}
if ("1".equals(remote.attr1) && "2".equals(remote.attr2) ) {
root.attr4 ="good";
}
} else if ("b".equals(remote.type)) {
root.type = "good";
if ("one".equals(remote.attr1)) {
root.attr2 = "1";
} else if ("two".equals(remote.attr1)) {
root.attr2 ="2";
}
} else if ("c".equals(remote.type)) {
root.type = "good";
if (remote.attr2.indexOf(":") > 0 ) {
String[] strArray = remote.attr2.split(":");
root.attr2=strArray[0];
root.attr3=strArray[1];
}
}
}
}
2 个对象用完全不同的结构描述 1 个事物。根类是我们系统的内核,不可能支撑,我们也认为这个根类非常适合本地系统。并且对于远程类来自我们无权更改的第 3 方系统。所以这个翻译变得非常困难。
我计划删除的是创建 200 多个翻译采用者:例如:
public class adopterA implements RootAdoper {
public RootClass translate(RemoteClass remote) {
RootClass root = new RootClass();
root.type="veryGood";
if ("one".equals(remote.attr1)) {
root.attr2 = "true";
}
if ("two".equals(remote.attr1)) {
root.attr3 = "true";
}
if ("1".equals(remote.attr1) && "2".equals(remote.attr2) ) {
root.attr4 ="good";
}
}
}
并将所有这些放入 HasMap
Map<String, RootAdoper> map = new HashMap<String, RootAdoper>();
但是仍然有 200 个小类来包装 if/else,有什么好的模式或设计来解决这个复杂的问题吗?提前致谢。