Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Співбесіди Тестування Відео
Екосистема
Пакети Ресурси
Інше
Події Про нас
Посібники 23 червня 2026
4

Composite - дерево об'єктів

Патерн Composite дозволяє працювати з деревом об'єктів так само, як з одним об'єктом. І окремий «лист», і «гілка» (група) реалізують той самий інтерфейс, тож клієнт викликає в них однакові методи.

Це корисно для ієрархічних структур: меню та підменю, дерева категорій, вкладені права доступу, кошик із бандлами, UI-компоненти.

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

У прикладі нижче і окремий товар (ProductItem), і набір товарів (Bundle) вміють рахувати total(). Бандл рахує суму своїх дітей, які теж можуть бути бандлами - глибина дерева не обмежена.

Коли НЕ варто: якщо структура завжди пласка (немає вкладеності) - Composite надлишковий, вистачить звичайної колекції.

interface CartItem
{
  public function total(): int;
}

class ProductItem implements CartItem
{
  public function __construct(private int $price) {}

  public function total(): int
  {
    return $this->price;
  }
}

class Bundle implements CartItem
{
  private array $items = [];

  public function add(CartItem $item): void
  {
    $this->items[] = $item;
  }

  public function total(): int
  {
    return array_sum(array_map(
      fn (CartItem $item) => $item->total(),
      $this->items
    ));
  }
}

Ця стаття - частина серії

Патерни проєктування

8 / 8

Коментарі

Увійдіть, щоб залишити коментар

Будьте першим, хто залишить коментар!

Читайте також

Патерн Bridge
Посібники 20 червня 2026
Патерни проєктування

Bridge - відокремлення абстракції

Патерн Bridge розділяє абстракцію та її реалізацію на дві окремі ієрархії, щоб змінювати їх незалежно. Це рятує, коли є кілька незалежних вимірів варіативності і за наївного підходу класи множаться комбінаторно.

Вакансії за темою

Full-time 2 дн. тому

Junior Backend Developer (Laravel)

KRONAS Віддалено За результатами співбесіди

Привіт! Ми — KRONAS, перша українська компанія на ринку меблевих комплектуючих і фурнітури з майже 30-річною історією та міжнародним досвідом. Наша команда — це понад 500 професіоналів, які створюють комфортні умови праці та постійно розвиваються разом із компанією. Ми запрошуємо тебе на позицію Junior Back-end розробника у Києві. Що ти робитимеш у нас: Розроблятимеш і підтримуватимеш серверну частину наших внутрішніх і зовнішніх систем. Працюватимеш над оптимізацією продуктивності та надійності бекенду. Співпрацюватимеш з командою розробників, аналітиків і тестувальників для реалізації нових функцій і покращень. Брати участь у проєктуванні архітектури застосунків та впровадженні сучасних технологій. Вирішуватимеш технічні задачі, що підтримують масштабування бізнесу KRONAS і покращують користувацький досвід. Кого ми шукаємо: Розробника з досвідом роботи на позиції Junior Back-end не менше 1 років. **Для позиції нам важливо, щоб ти знав та вмів використовувати знання з математики та геометрії Досвід з docker, REST Api, php. Того, хто вміє працювати в команді, відкритий до спільного пошуку рішень та прагне розвиватися. Освіта не є визначальною — цінуємо твої навички, досвід і бажання вчитися. Що пропонуємо ми: Роботу в стабільній і шанованій компанії з майже 30-річною історією та міжнародним досвідом. Ринкову та своєчасну заробітну плату з перспективою зростання залежно від твоїх результатів. Графік роботи: Гібрид/ офіс/ віддалено. Понеділок-п'ятниця з 9:00 до 18:00 Дружню, підтримуючу атмосферу і сильну корпоративну культуру, де цінують кожного співробітника. Можливості для професійного зростання і навчання — ми адаптуємо і розвиваємо таланти. Соціальні гарантії, корпоративні бонуси, знижки на продукцію компанії. Участь у розвитку інноваційних проєктів, які підтримують бізнес KRONAS та роблять життя клієнтів кращим. Приєднуйся до команди KRONAS — компанії, де цінують людей, підтримують прагнення до розвитку і створюють комфортне робоче середовище. Надсилай нам своє резюме та стань частиною нашої сім'ї вже сьогодні!

Full-time 3 дн. тому

'Backend Developer (PHP/Laravel), розробник систем цифрової логістики

Компанія "Центральне відділення комплектування НГУ" у місті Дніпро шукає в свою команду Backend Developer (PHP/Laravel), розробника систем цифрової логістики. Ми спеціалізуємося на розробці та впровадженні інноваційних рішень у сфері логістики та комплектування, що допомагають нашим клієнтам оптимізувати процеси та підвищувати ефективність бізнесу. Обов’язки: Розробка та підтримка систем цифрової логістики на базі PHP та фреймворку Laravel; Участь у проектуванні та розробці нового функціоналу; Взаємодія з іншими відділами для вирішення завдань та вдосконалення продукту. Вимоги: Досвід роботи з PHP та фреймворком Laravel від 2 років; Знання SQL та базове розуміння принципів роботи баз даних; Бажання вчитися та розвиватися в обраній сфері; Вміння працювати в команді та брати на себе відповідальність. Переваги: Конкурентна заробітна плата та можливість кар'єрного зростання; Цікаві проекти та можливість впливати на їх розвиток; Дружний колектив та комфортні умови праці. Якщо ви маєте бажання приєднатися до нашої команди та внести свій внесок у розвиток цифрової логістики, надсилайте своє резюме! Ми чекаємо саме на вас!

Full-time 4 дн. тому

Web-програміст (Fullstack, Laravel, Vue.Js)

Яремчук І.П., ФОП Віддалено За результатами співбесіди

Потрібен Fulstack developer. Ми спеціалізуємося на розробці веб-сайтів, CRM/ERP систем та інших програмних рішень для клієнтів з України, Європи та США. Ми пропонуємо вам можливість працювати віддалено з будь-якої точки світу, в команді професіоналів з багаторічним досвідом. Ви будете відповідати за розробку та підтримку веб-додатків, участь у проектуванні архітектури, взаємодію з клієнтами та іншими членами команди. Вимоги: Досвід роботи на позиції Fullstack Developer від 3 років Практичний досвід роботи з PHP, Larave, Filament Знання JavaScript (ES6+), HTML, CSS Досвід роботи з Vue Досвід роботи з базами даних (SQL або NoSQL) Розуміння принципів роботи RESTful API Активне використання АІ в розробці Вміння працювати в команді та готовність вчитися новому Якщо ви готові приєднатися до нашої команди та прийняти виклик розробки високоякісних програмних продуктів, надсилайте свої резюме. Ми готові розглянути кандидатів без вищої освіти, головне — ваш досвід та вміння.

Пакети за темою

Bagisto

bagisto/bagisto

Bagisto — це платформа для електронної комерції, побудована на Laravel. Вона надає готове рішення для створення та управління інтернет-магазинами з підтримкою каталогу товарів, замовлень, платежів та клієнтів.

27,343 v2.4.6 12 3

Lang

laravel-lang/lang

Список 126 мов для Laravel Framework, Laravel Jetstream, Laravel Fortify, Laravel Breeze, Laravel Cashier, Laravel Nova, Laravel Spark та Laravel UI.

7,779 15.31.4 2