Мне нравится иметь возможность предоставлять значения по умолчанию для классов, которые можно использовать, но проблема в том, что если они будут изменены, это повлияет на все ссылки на него и не будет "значением по умолчанию".Используя значение по умолчанию, подобное этому, оно экономит память и позволяет распространять значение по умолчанию, если нужно, на все ссылки, которые используют значение по умолчанию.
Простой пример:
class A
{
static public A Default;
}
Затем можно использовать A.Default в качестве экземпляра A. по умолчанию. Опять же, проблема в том, что A не является неизменным или, по крайней мере, «замороженным», и изменения в нем изменят все ссылки.Это может быть хорошо, если это такое поведение, которое вы хотите, но может вызвать хаос, если значение по умолчанию изменено случайно.
Что мне действительно нужно, так это способ глубокой заморозки и разморозки по умолчанию.
Очевидно, что один из способов - просто установить все сеттеры только на условие и пометить коллекции как доступные только для чтения.Похоже, много повторяющихся работ по обеспечению такого простого поведения.
Существует ли простая библиотека, шаблон или рефлексия для достижения этой цели?Возможность копирования при записи была бы полезна, чтобы при попытке изменить значение Default был создан новый изменяемый экземпляр.Мало того, даже экземпляр flyweight может быть создан, если у него есть шанс повысить производительность (размер изменений).
Пример: Предположим, что вы изначально создаете объекты размером 1 МБ (размер памяти) с одинаковым состоянием.Используя шаблон по умолчанию, это создаст только 1 фактический объект.Предположим, вы изменили 1 параметр для всех состояний (скажем, положение), но сами объекты очень велики.Используя шаблон flyweight, вы бы просто изменили параметры 1M, чтобы отслеживать (медленнее, но меньше памяти, как обычно) вместо 1M новых объектов.После того, как достаточное количество параметров было изменено, полностью выделенному объекту наконец присваивается ссылка.
Что-нибудь подобное?