---
title: "Decorator - middleware як обгортка"
url: https://laravelukraine.com/blog/decorator-middleware-iak-obgortka
author: "Олексій Бабінцев"
date: 2026-06-26
---

# Decorator - middleware як обгортка

Decorator додає об'єкту нову поведінку, обгортаючи його в інший об'єкт із тим самим інтерфейсом, без змін у базовому компоненті.

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

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

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

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

У Laravel ця ідея природно виглядає як Middleware: кожен middleware обгортає наступний і додає поведінку. Формально middleware - це framework-реалізація ідей Decorator та Chain of Responsibility.

```php
use Closure;
use Illuminate\Http\Request;

class LogTime
{
  public function handle(Request $request, Closure $next)
  {
    $start = microtime(true);
    $response = $next($request);
    $ms = (microtime(true) - $start) * 1000;
    logger()->info('req ms', ['ms' => $ms]);

    return $response;
  }
}

// Застосувати middleware напряму за класом:
Route::middleware(LogTime::class)
  ->get('/orders', [OrderController::class, 'index']);

// Або зареєструвати аліас у bootstrap/app.php (Laravel 11+):
->withMiddleware(function (Middleware $middleware) {
    $middleware->alias([
        'log.time' => LogTime::class,
    ]);
})

Route::middleware('log.time')->get('/', HomeController::class);
```

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

- Кросфункціональні задачі: логування, кешування, авторизація, rate-limit.
- Коли поведінку треба вмикати опціонально й комбінувати у різному порядку.

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

- **+** Логіка додається шарами і легко комбінується без вибуху підкласів.
- **+** Композиція гнучкіша за спадкування - шари вмикаються динамічно.
- **−** Порядок шарів важливий і його треба контролювати.
- **−** Багато дрібних обгорток ускладнюють відлагодження стека викликів; тримайте кожен декоратор маленьким і відповідальним за одну річ.
