Unveränderliche Objekte und unveränderbare Sammlungen

Wo ist es bei einem unveränderlichen Objekt angebracht, eine enthaltene Sammlung als nicht änderbar zu verpacken? Ich sehe 3 Möglichkeiten:

In der Fabrik des unveränderlichen Objekts:

public class ImmutableFactory {

    public Immutable build(){
       List<Integer> values = new ArrayList<Integer>();

        values.add(1);
        values.add(2);
        values.add(3);

        return new Immutable(Collections.unmodifiableList(values), "hello");
    }
}

Im Erbauer des Unveränderlichen

public class Immutable {

    private final List<Integer> values;
    private final String hello;

    public Immutable(List<Integer> values, String hello) {
        this.values = Collections.unmodifiableList(values);
       this.hello = hello;
    }

    public List<Integer> getValues() {
        return values;
    }

    public String getHello() {
        return hello;
    }
}

Im Accessor der unveränderlichen Datei (falls zutreffend).

public class Immutable {

    private final List<Integer> values;
    private final String hello;

    public Immutable(List<Integer> values, String hello) {
        this.values = values;
        this.hello = hello;
    }

    public List<Integer> getValues() {
        return Collections.unmodifiableList(values);
    }

    public String getHello() {
        return hello;
    }
}

Gibt es noch andere Optionen und welche sind die richtigen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage