Легковаговик (шаблон проєктування)

У програмуванні, легковаговик[1][2](англ. flyweight pattern) — шаблон проєктування, за яким створюється об'єкт, що мінімізує використання пам'яті розподіляючи стільки даних скільки це можливо між іншими подібними об'єктами; це спосіб використання великої кількості об'єктів, коли просте повторювання їх представлення зайняло б неприпустиму кількість пам'яті. Часто деякі частини, що зберігають стан об'єктів можуть бути спільними, і загальною практикою є тримати їх у деякий зовнішній структурі даних і передавати їх до об'єктів тимчасово коли вони використовуються.

Класичним прикладом застосування шаблону легковаговик це структури даних для графічного представлення символів при відображенні тексту. Для цього необхідно буде мати, для кожного символу в документі, об'єкт гліфу що містить контури шрифту, метрику і інші дані про форматування, але це буде займати сотні або тисячі байт для кожного символу. Замість представлення таким чином кожного символу, там можна задати посилання на легкий, щодо використання пам'яті, об'єкт із гліфом для кожного екземпляру однакового символу в документі; і в результуючому об'єкті доведеться зберігати лише тільки позицію кожного символу (в документі і/або на сторінці).

Іншим прикладом застосування цього шаблону є метод стиснення текстових рядків шляхом інтернування.

Призначення

Використовується для ефективної підтримки (в першу чергу для зменшення затрат пам'яті) великої кількості дрібних об'єктів.

Опис

Шаблон Легковаговик (Flyweight) використовує загальнодоступний легкий об'єкт (flyweight, легковаговик), який одночасно може використовуватися у великій кількості контекстів. Стан цього об'єкта поділяється на внутрішній, що містить інформацію, незалежну від контексту, і зовнішній, який залежить або змінюється разом з контекстом легковаговика. Об'єкти клієнтів відповідають за передачу зовнішнього стану легковаговика, коли йому це необхідно.

Переваги

  • Зменшує кількість об'єктів, що підлягають обробці.
  • Зменшує вимоги до пам'яті.

Недоліки

  • Переміщення стану поза об'єктом розбиває інкапсуляцію та може бути менш ефективним, ніж збереження власного поля

Застосування

Шаблон Легковаговик можна використовувати коли:

  • В програмі використовується велика кількість об'єктів.
  • Затрати на збереження високі через велику кількість об'єктів.
  • Більшість станів об'єктів можна зробити зовнішніми.
  • Велика кількість груп об'єктів може бути замінена відносно малою кількістю загальнодоступних об'єктів, однократно видаливши зовнішній стан.
  • Програма не залежить від ідентичності об'єктів. Оскільки об'єкти-легковаговики можуть використовуватися колективно, то тести на ідентичність будуть повертати значення "істина" ("true") для концептуально різних об'єктів.

Діаграма UML

Реалізація

C++

C#

Java

Джерела

Література

  • Будай, Андрій (2012). Дизайн-патерни — просто, як двері. с. 90.
  • Алан Шаллоуей, Джеймс Р. Тротт. Шаблоны проектирования. Новый подход к объектно-ориентированному анализу и проектированию = Design Patterns Explained: A New Perspective on Object-Oriented Design. — М. : «Вильямс», 2002. — 288 с. — ISBN 0-201-71594-5.

Зноски

  1. https://refactoring.guru/uk/design-patterns/flyweight
  2. Будай, 2012, с. 42.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.