Ho un progetto java che comporta la costruzione di oggetti piuttosto complessi. Ce ne sono parecchie (dozzine) diverse e alcune hanno un numero enorme di parametri. Devono anche essere immutabili.
Quindi pensavo che il modello di build avrebbe funzionato, ma alla fine ha richiesto molto standard. Un'altra potenziale soluzione che ho pensato è stata quella di creare una classe mutevole, ma dargli una bandiera "congelata", a-la-rubino.
Ecco un semplice esempio:
public class EqualRule extends Rule {
private boolean frozen;
private int target;
public EqualRule() {
frozen = false;
}
public void setTarget(int i) {
if (frozen)
throw new IllegalStateException(
"Can't change frozen rule.");
target = i;
}
public int getTarget() {
return target;
}
public void freeze() {
frozen = true;
}
@Override
public boolean checkRule(int i) {
return (target == i);
}
}
e "Rule" è solo una classe astratta che ha un metodo "checkRule" astratto.
Questo riduce il numero di oggetti che ho bisogno di scrivere, dandomi anche un oggetto che diventa immutabile a tutti gli effetti. Questo tipo di agisce come se l'oggetto fosse il suo Costruttore ... Ma non proprio.
Tuttavia, non sono troppo eccitato all'idea di avere un immutabile essere camuffato da fagiolo.
Quindi ho avuto due domande: 1. Prima di andare troppo avanti su questa strada, ci sono grossi problemi che qualcuno vede subito? Per quello che vale, è previsto che questo comportamento sia ben documentato ... 2. In caso affermativo, c'è una soluzione migliore?
Grazie