---
title: "Flyweight - спільні легкі об'єкти"
url: https://laravelukraine.com/blog/flyweight-spilni-legki-objekti
date: 2026-07-02
---

# Flyweight - спільні легкі об'єкти

Flyweight зменшує споживання пам'яті, повторно використовуючи спільні екземпляри замість створення тисяч однакових об'єктів.

### Яку проблему вирішує

Коли в пам'яті живуть тисячі об'єктів, які повторюють той самий незмінний стан (код країни, її назва), вони даремно дублюють однакові дані й роздувають пам'ять.

### Як вирішує

Стан розділяють на внутрішній (спільний, незмінний) та зовнішній (унікальний для контексту, передається ззовні в момент виклику). Об'єкти зі спільним внутрішнім станом кешуються у фабриці й віддаються повторно.

```php
class CountryFlyweight
{
  public function __construct(
    public string $code, 
    public string $name
  ) {}
}

class CountryFactory
{
  private array $cache = [];

  public function get(string $code, string $name): CountryFlyweight
  {
    $key = $code;
    if (!isset($this->cache[$key])) {
      $this->cache[$key] = new CountryFlyweight($code, $name);
    }
    return $this->cache[$key];
  }
}
```

### Де застосовувати

- Кеш довідників (країни, валюти, одиниці виміру) або спільні конфіги, які інакше дублювались би на кожен рядок вибірки.
- Важкі цикли чи обробка великих наборів даних, де однаковий стан повторюється масово.

### Плюси та мінуси

- **+** Помітна економія пам'яті за масового дублювання.
- **+** Спільний незмінний стан гарантовано однаковий для всіх.
- **−** Розділення стану на внутрішній і зовнішній ускладнює код.
- **−** Для невеликої кількості об'єктів економія непомітна; сучасні фреймворки і так багато кешують, тож ручний Flyweight потрібен рідко.
