Глоссарий

Decorator Pattern

Decorator — паттерн, динамически добавляющий новый функционал объекту без изменения его класса. Оборачивает оригинальный объект и расширяет или изменяет его поведение, реализуя тот же интерфейс.

Пример

interface Logger { log(string $msg): void; }

class FileLogger implements Logger { ... }

class TimestampLogger implements Logger {
  public function __construct(private Logger $inner) {}
  public function log(string $msg): void {
    $this->inner->log(date('H:i:s') . ' ' . $msg);
  }
}

Преимущества перед наследованием

Декораторы комбинируются динамически: new JsonLogger(new TimestampLogger(new FileLogger())). Наследование потребовало бы N² подклассов для каждой комбинации. Декораторы избегают нарушения Open/Closed, типичного при наследовании.