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?