Design per oggetto con attributi opzionali e modificabili?

2

Ho utilizzato il pattern Builder per creare oggetti con un numero elevato di attributi, in cui la maggior parte di essi è facoltativo. Ma fino ad ora, li ho definiti come finali, come raccomandato da Joshua Block e altri autori, e non ho avuto bisogno di cambiare i loro valori.

Mi chiedo cosa devo fare se ho bisogno di una classe con un numero considerevole di attributi facoltativi ma non definitivi (mutevoli)?

Il codice del pattern di My Builder è simile a questo:

public class Example {
    //All possible parameters (optional or not)
    private final int param1;
    private final int param2;

    //Builder class
    public static class Builder {
        private final int param1; //Required parameters
        private int param2 = 0;   //Optional parameters - initialized to default

        //Builder constructor
        public Builder (int param1) {
            this.param1 = param1;
        }

        //Setter-like methods for optional parameters
        public Builder param2(int value)
        { param2 = value; return this; }

        //build() method
        public Example build() {
            return new Example(this);
        }
    }

    //Private constructor
    private Example(Builder builder) {
        param1 = builder.param1;
        param2 = builder.param2;
    }
}

Posso semplicemente rimuovere la parola chiave final dalla dichiarazione per poter accedere agli attributi esternamente (tramite setter normali, ad esempio)? Oppure esiste un modello creativo che consente attributi opzionali ma non finali che sarebbero più adatti in questo caso?

    
posta Ikuzen 17.08.2014 - 21:47
fonte

1 risposta

1

Hai capito il contrario.

Il punto di Builder è consentire la creazione della classe, che ha molti parametri finali, ma facoltativi. Se non hai utilizzato Builder, dovresti utilizzare tonnellate di diversi costruttori.

Ma se la tua classe non ha bisogno che quei campi siano definitivi, allora non c'è bisogno di un costruttore. Basta renderli mutabili e impostarli dopo aver creato l'istanza.

    
risposta data 19.08.2014 - 14:36
fonte

Leggi altre domande sui tag