Вы путаете понятия.Тот факт, что класс является неизменным, не означает, что вы будете «повторно использовать» предыдущие объекты.
Например, если я сделаю
ImmutableClass myImmu = new ImmutableClass(5);
ImmutableClass myImmu2 = new ImmutableClass(5);
, я создал два разных объекта (даже если ихреализация equals () возвращает true).
Другая вещь - это пул / кеширование, где вы храните список созданных экземпляров и вместо вызова конструктора вы вызываете метод Factory, который может получить ранеекэшированный экземпляр.Неизменяемые классы легче объединять / кэшировать, поскольку их состояние зависит только от конструктора, поэтому вы уверены, что он не изменился.
private static Map<Integer, InmutableClass> pool = ...
public static InmutableClass getInstance(int param) {
InmutableClass returnValue = pool.get(param);
if (returnValue == null) {
returnValue = new InmutableClass(param);
pool.put(param, returnValue);
}
return returnValue;
}
Конечно, если ваши экземпляры редко используются повторно, вы бы прекратили использовать больше памятис этой схемой.