Ho una serie di informazioni che sono in grado di leggere come dati grezzi che corrispondono a diverse grandezze fisiche a seconda del dispositivo che ha fornito tali informazioni. Ogni dispositivo contiene la stessa quantità di dati e gli stessi tipi, solo diversi campi sono interpretati in modo diverso. Ecco come l'ho implementato finora:
public abstract class SuperData {
int voltage1;
int voltage2;
SuperData(int v1, int v2) {
voltage1 = v1;
voltage2 = v2;
}
public int getVoltage1 { return voltage1; }
public int getVoltage2 { return voltage2; }
}
public class CarAData extends SuperData {
CarAData(int v1, int v2) { super(v1, v2); }
public int getKeyVoltage { return getVoltage1(); }
public int getLightVoltage { return getVoltage2(); }
}
public class CarBData extends SuperData {
CarAData(int v1, int v2) { super(v1, v2); }
public int getStarterVoltage { return getVoltage1(); }
public int getCigarretteVoltage { return getVoltage2(); }
}
Questo è solo un esempio banale; in realtà si tratta di circa 60 campi che sono solo un array di byte proveniente da Bluetooth. Sto utilizzando una factory per creare l'oggetto corretto in base a un altro flusso di dati, ma il problema è che richiede l'utilizzo di instanceof
in fondo alla strada per sapere quale metodo chiamare.
Quindi quale modello è il modo migliore per rappresentare i dati che hanno significati diversi?