Лёгкие массивы объектов неизменны? - PullRequest
0 голосов
/ 13 февраля 2019

Мы знаем, что пул внутренних строк Java основан на шаблоне проектирования Flyweight.Также объект String является неизменным.Обязательно ли, чтобы все объекты, которые используют шаблон Flyweight, были неизменными?,В чем разница между изменяемыми и неизменяемыми объектами в шаблоне Flyweight?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Помните, что шаблоны проектирования GoF были собраны из кода, написанного примерно в 1980-х годах.Изменчивость не была проблемой сегодня.Имея это в виду, все их шаблоны поддерживают изменяемое состояние.Единственная заметка в книге GoF, касающаяся изменчивости, является проходной ссылкой на удаление составных конечных узлов.Я бы истолковал все другие ссылки на объекты в книге как потенциально изменяемые.

Это не означает, что изменчивость желательна или что шаблоны не могут быть неизменными.Действительно, неизменность - это отличная особенность, которую следует применять в шаблонах проектирования по тем же причинам, что и в других местах.Но это никогда не обязательно в GoF.

0 голосов
/ 13 февраля 2019

Обязательно ли, чтобы все объекты, которые используют шаблон Flyweight, были неизменяемыми

Вы можете реализовать что-то похожее на муху, но ваши объекты вполне могут быть изменяемыми.Я бы расценил это как плохую реализацию.

Смотрите комментарии повторно.инвариантное состояние здесь .

Неизменность, безусловно, желательна, просто в зависимости от характера использования шаблона в навесном весе.Ваши клиенты могут не знать, что запрошенный / созданный ими объект фактически используется совместно с другими компонентами или потоками, и наличие изменяемого объекта в этом сценарии может быть проблематичным.

...