我有2类FormatA和FormatB。它们以2种不同的格式保存相同的数据,以方便进行处理。

现在在我的应用程序中的某个时候,我想从FormatA创建FormatB。

我认为应该有从FormatA序列化到FormatB并反序列化的Serializer。现在,基于序列化的定义,我的思维过程听起来不正确。


  序列化是将对象的状态(包括其引用)转换为字节序列的过程,以及在将来的某个时间将这些字节重建为活动对象的过程。简单……将对象覆盖为字节,然后将字节恢复为对象。


在这种情况下,实现目标的正确方法是什么?我还有其他几种可能性:


让类FormatA和FormatB具有转换为另一种格式的方法。
具有使用transformToFormatA(formatB)transformToFormatB(formatA)之类的方法进行转换的实用程序。


不确定哪种方法正确?

最佳答案

如前所述,FormatA和FormatB包含相同的数据。因此,看起来-在应用程序中,相同的数据正以两种不同的格式使用。为此目的使用序列化可能是一个hack。

相反,您可以将数据保留在一个位置,并根据要求使用asXXFormat方法以所需格式显示。例如P(x,y)点可以在笛卡尔坐标和极坐标中使用。 Class Point可以将自己显示为两个视图,即笛卡尔和极地。

public interface Cartesian {
    double getX();
    double getY();
}
public interface Polar {
    double getMagnitude();
    double getAngle();
}
public class Point{
    private double x;
    private double y;
    public Point(double x, double y) {
        this.x = x;
        this.y = y;
    }
    public Cartesian asCartesian(){
        return new Cartesian(){

            @Override
            public double getX() {
                return x;
            }

            @Override
            public double getY() {
                return x;
            }
        };
    }

    public Polar asPolar(){
        return new Polar(){

            @Override
            public double getMagnitude() {
                return Math.sqrt(x*x + y*y);
            }

            @Override
            public double getAngle() {
                return Math.atan2(y, x);
            }
        };
    }
}

09-08 03:47