Шаблон мухи - как хранить весы в структуре данных? - PullRequest
0 голосов
/ 07 апреля 2011

Пример реализации классического шаблона Flyweight из книги GoF хранит код символа только для разделяемых «символов» и использует «GlyphContext» для хранения внешнего состояния в древовидной структуре. В этом примере также упоминаются строки и столбцы, однако в нем не упоминается, как хранить «коллекцию» маховиков (объекты «персонажей»).

Понятно, что этот шаблон позволяет избежать создания огромного количества объектов путем совместного использования экземпляров, но как можно создать структуру таких объектов (например, для представления документа), не создавая структуру ссылок на кэшированные объекты (которые сделает недействительным назначение шаблона)? Я вижу, что в других примерах кэшированные экземпляры используются в качестве «одноразовых» объектов без создания какой-либо структуры, но это, похоже, не имеет никакого смысла, поскольку его можно заменить набором статических операций.

Правильно ли сделать вывод, что если нужно ссылаться на маховики после их создания, выгода шаблона может быть грубо рассчитана как [размер внутреннего состояния] / [размер ссылки на объект], Это означает, что вес в полете только с одним полем не имеет смысла?

РЕДАКТИРОВАТЬ: я был не прав в моих "вычислениях памяти" ... Без маховиков вам все равно нужно хранить ссылки, но с маховиками вам больше не нужно хранить объекты. Основная идея вопроса все еще кажется верной - степень экономии, обеспечиваемая шаблоном, пропорциональна размеру внутреннего состояния, а не количеству «логических объектов». Правда или ложь?

1 Ответ

0 голосов
/ 07 апреля 2011

Да, даже один полевой весовой объект имеет смысл , если вы будете часто использовать этот объект.Быстрее получать их экземпляры, затем создавать новые объекты.

Я считаю Map <string name, Object yourobject> (в Java) хорошим способом их хранения.Почему вам не нужно «никакой структуры»?

Использование некоторой структуры для хранения используемых маховиков не отменяет назначение шаблона.Вам нужно несколько экземпляров flywieghts, чтобы использовать их.Вы можете сделать их во время выполнения и добавить их в список (так должно быть, чтобы избежать ненужных объектов), или вы можете подготовить их до выполнения (ведьма имеет «низкий» смысл).

...