Ho circa 30 oggetti "non cambianti" (la quantità di essi è definitiva, non è possibile aggiungere o rimuovere altro). Ogni oggetto ha un id e alcuni booleani che descrivono cosa è l'oggetto e cosa no. Ora, ogni oggetto ha una variabile che deve essere cambiata in fase di runtime. Molte di queste variabili sono solo un numero intero, ma alcune hanno anche stringhe, liste, ecc.
Ora mi chiedo come implementarlo. Il mio attuale tentativo è un enum con gli oggetti dati, le loro proprietà e metodi per cambiarli (per la variabile ho scelto solo oggetto come tipo, per memorizzare sia interi che elenchi). Funziona, ma non sembra il modo corretto, OO, per farlo. Quali sono le alternative? Il linguaggio di programmazione è Java, se questo è importante.
Ecco il mio tentativo (un po 'più complicato di quello che ho spiegato sopra):
public enum StatusInfos {
THING_1("id0", false ,false, false, NOT_UPGRADABLE),
THING_1_WITH_HAT("id1", true, false, false, NOT_UPGRADABLE),
ANOTHER_THING("id2", false, false, false, NOT_UPGRADABLE),
GREEN_THING("id3", true, false, false, NOT_UPGRADABLE),
TALKING_DUCK("id4", true, false, false, NOT_UPGRADABLE);
private final String id;
private final Boolean hasAdditionalValue;
private Double value;
private Double additionalValue;
private boolean needsDouble;
private boolean needsPerCent;
private Integer upgradeCategory;
private Object additionalValue;
StatusInfos(String id, Boolean hasAdditionalValue, boolean needsDouble, boolean needsPerCent, Integer upgradeCategory){
this.id = tag;
this.hasAdditionalValue = hasAdditionalValue;
this.needsDouble = needsDouble;
this.needsPerCent = needsPerCent;
this.upgradeCategory = upgradeCategory;
}
public String id(){
return id;
}
public Double value(){
return value;
}
public void setValue(Double value){
this.value = value;
}
public boolean hasAdditionalValue(){
return hasAdditionalValue;
}
public Double additionalValue(){
return additionalValue;
}
public void setAdditionalValue(Double newAdditionalValue){
additionalValue = newAdditionalValue;
}
public boolean hasSpecialValue(){
return false;
}
public Object specialValue(){
return null;
}
public void setSpecialValue(Object newValue){
return;
}
public boolean needsNumbersAfterComma(){
return needsDouble;
}
public boolean needsPerCent(){
return needsPerCent;
}
public Integer getUpgradeCategory() {
return upgradeCategory;
}
public Object getAdditionalValue(){
return additionalValue;
}
public void setAdditionalValue(Object additionalValue)
this.additionalValue = additionalValue;
}
}