Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Яку проблему вирішує патерн Flyweight?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**Flyweight (Пристосуванець)** вирішує проблему **надмірного споживання пам'яті**, коли в системі потрібно створювати **величезну кількість однотипних об'єктів**, що містять повторювані дані. **Ключове:** внутрішній (спільний) стан зберігається в одному спільному об'єкті, який розділяється між безліччю клієнтів, тому пам'ять не витрачається на дублювання однакової інформації.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення**Flyweight (Пристосуванець)** вирішує проблему **надмірного споживання пам'яті**, коли в системі потрібно створювати **величезну кількість однотипних об'єктів**, що містять повторювані дані. --- ### 1. **Суть проблеми** Коли мільйони об'єктів мають однакові поля (наприклад, колір, шрифт, текстуру), зберігання цих даних у кожному екземплярі стає неефективним. Пам'ять витрачається на дублювання однакової інформації. --- ### 2. **Що робить Flyweight** Патерн розділяє стан об'єкта на: - **внутрішній (intrinsic)** - спільний для всіх екземплярів, - **зовнішній (extrinsic)** - унікальний і передається ззовні під час використання. Внутрішній стан зберігається **в одному спільному об'єкті**, який **розділяється між безліччю клієнтів**. --- ### 3. **Приклад (Java)** ```java class TreeType { private String name; private String color; private String texture; public void draw(int x, int y) { System.out.println("Малюємо " + name + " у (" + x + "," + y + ")"); } } class TreeFactory { private static Map<String, TreeType> cache = new HashMap<>(); public static TreeType getTreeType(String name, String color, String texture) { String key = name + color + texture; return cache.computeIfAbsent(key, k -> new TreeType(name, color, texture)); } } class Tree { private int x, y; // зовнішній стан private TreeType type; // внутрішній стан (спільний об'єкт) } ``` Тут мільйони `Tree` використовують одні й ті самі `TreeType` (колір, текстуру, форму). --- ### 4. **Результат** - Економія пам'яті: спільний стан зберігається в одному місці. - Швидка робота з великими колекціями однотипних об'єктів. --- ### 5. **Коли застосовувати** - У системах з великою кількістю однотипних об'єктів (графіка, ігрові сцени, кеш символів, текстові редактори). - Коли більшість даних об'єктів повторюється. --- **Підсумок:** **Flyweight** вирішує проблему **надлишкового дублювання даних**, дозволяючи багатьом об'єктам **розділяти спільний стан** і тим самим **різко знизити споживання пам'яті**.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.