gpt4 book ai didi

java - 双向数据格式转换的设计模式

转载 作者:行者123 更新时间:2023-11-30 10:44:07 25 4
gpt4 key购买 nike

我从事的项目将处理不同的数据格式。

例如,假设我有以下数据格式:

formatA, formatB, formatC, ...

具有以下类。

格式A:

public class dataFormatA {

private String data;

public dataFormatA(String data) {
this.data = data;
// convertData(this.data);
}

public dataFormatB convertToDataFormatB() {
return new dataFormatB(data);
}

public dataFormatC convertToDataFormatC() {
return new dataFormatC(data);
}

}

格式B:

public class dataFormatB {

private String data;

public dataFormatB(String data) {
this.data = data;
// convertData(this.data);
}

public dataFormatA convertToDataFormatA() {
return new dataFormatA(data);
}

public dataFormatC convertToDataFormatC() {
return new dataFormatC(data);
}

}

格式C:

public class dataFormatC {

private String data;

public dataFormatC(String data) {
this.data = data;
// convertData(this.data);
}

public dataFormatA convertToDataFormatA() {
return new dataFormatA(data);
}

public dataFormatB convertToDataFormatB() {
return new dataFormatB(data);
}
}

最好的设计模式是什么?目前,每个类都有一个方法将其数据类型转换为其他数据格式类。但这不是一个好的设计,因为它违反了开闭原则

最佳答案

你能设计出一种(或极少数)中间格式吗?我们称这样的格式为M;那么您只需要从每种格式到 M 的转换器,以及从 M 到每种格式的转换器。添加更多格式变得容易。

如果您在每对格式之间有一种非平凡且独特的转换方式,那么您将无法拥有一个完整的矩阵。

您仍然不需要将转换器代码保留在格式类中。

相反,我会创建一个通用的转换器接口(interface):

interface FormatConverter<SRC, DST> {
DST convertFrom(SRC);
}

现在您可以使用任何您喜欢的机制来实现这个接口(interface),可能是通过拥有一堆转换器类。

转换器可以通过包级可见性查看每个格式类的某些非公开详细信息。或者,它们可以是格式的内部类。 OTOH 这再次在格式类和转换器之间创建了紧密耦合,因此可能违反开闭原则。

关于java - 双向数据格式转换的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37496183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com