Мне нравится иметь возможность предоставлять значения по умолчанию для классов, которые могут быть использованы, но проблема в том, что если они изменены, то он будет обрабатывать все ссылки на него и не будет «по умолчанию». Используя значение по умолчанию, такое как это, оно сохраняет в памяти и позволяет по умолчанию, если хотите, распространять все ссылки, которые используют значение по умолчанию.статический неизменяемый экземпляр по умолчанию
Простой пример
class A
{
static public A Default;
}
Тогда можно использовать A.Default в качестве «по умолчанию», например А. Опять же, проблема в том, что А не является неизменным или, по крайней мере, «замороженных» и изменений он изменит все ссылки. Это может быть хорошо, если это поведение, которое требуется, но может привести к хаосу, если по умолчанию будет изменено случайно.
Что мне действительно нужно, это способ глубокой заморозки и размораживания.
Очевидно, что один способ состоит в том, чтобы просто настроить все сеттеры только на условиях и отмечать коллекции как только для чтения. Кажется, что много повторяющейся работы, чтобы обеспечить такое простое поведение.
Есть ли простая библиотека, узор или отражение, чтобы выполнить это? Возможность копирования на запись была бы приятной, так что, если попытка по умолчанию будет изменена, будет создан новый изменяемый экземпляр. Мало того, даже экземпляр мухи может быть создан, если у него есть шанс увеличить производительность (размер изменений).
Пример: предположим, что вы создали объекты размером 1M (размер памяти) со всем одним и тем же состоянием. Используя шаблон по умолчанию, это создаст только 1 фактический объект. Предположим, вы изменили 1 параметр для всех состояний (скажем, положение), но сам объект очень большой. Используя шаблон flyweight, у вас будет только 1M измененных параметров, чтобы отслеживать (медленнее, но меньше памяти, как обычно) вместо 1M новых объектов. После того, как будет изменено достаточно параметров, объект с полным разнесением, наконец, будет присвоен его ссылке.
Что-нибудь там вроде этого?
В каком состоянии вы хотите «разморозить» по умолчанию и кто должен «разморозить» значение по умолчанию? – shahkalpesh
Вы уверены, что вам действительно нужен что-то такое сложное? –
Это похоже на дефект дизайна. У вас есть класс A, который является неизменным, когда его экземпляр «Default» еще изменен, когда его нет.В Perhapes вам нужно, чтобы два класса были неизменяемыми и изменяемыми, или perhapes ваш класс A действительно должен быть объектом типа struct или типа значения (например, String). – MerickOWA