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

Adapter - узгодження інтерфейсів

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

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

Стороння бібліотека чи зовнішнє API майже завжди має свій інтерфейс, який не збігається з тим, що використовує ваша бізнес-логіка. Підлаштовувати весь код під чужий SDK - означає прив'язатися до нього й переписувати все при зміні провайдера.

Як вирішує

Ви описуєте власний контракт, а адаптер реалізує його, всередині викликаючи чужий код і перекладаючи виклики у потрібний формат. Бізнес-логіка працює лише з вашим контрактом.

interface PaymentGateway
{
  public function charge(int $amount, string $currency): string;
}

class StripeClient
{
  public function pay(array $payload): array
  {
    return ['id' => 'ch_123'];
  }
}

class StripeAdapter implements PaymentGateway
{
  public function __construct(private StripeClient $client) {}

  public function charge(int $amount, string $currency): string
  {
    $result = $this->client->pay([
      'amount' => $amount,
      'currency' => $currency,
    ]);

    return $result['id'];
  }
}

StripeAdapter перекладає наш контракт PaymentGateway у виклики SDK Stripe. Якщо завтра прийде інший процесинг, ми напишемо новий адаптер, а решта коду не зміниться.

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

  • Платіжні шлюзи, логери, зовнішні API, легасі-код із незручним інтерфейсом.
  • Скрізь, де треба підмінювати провайдерів за єдиним контрактом.

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

  • + Ізолює бізнес-логіку від чужих інтерфейсів - провайдер міняється без правок ядра.
  • + Дозволяє підключити несумісний код, не торкаючись його.
  • Додатковий шар класів і перекладу.
  • Надлишковий, якщо ви контролюєте обидва боки й можете відразу узгодити інтерфейси; адаптер потрібен саме для чужого коду, який не можна змінити.
62

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

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

6 / 21

Коментарі

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

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

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

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

BINTIME Нова
2 дн. тому

Middle Full Stack Developer (PHP/React)

Middle Full Stack розробник для платформи e-commerce на мікросервісах. 70% PHP (Laravel/Symfony, REST APIs, MySQL/PostgreSQL, Redis), 30% React та Blade шаблони. Потрібно 3+ років досвіду з PHP 8.x, Docker, Git, готовність працювати з AI-інструментами (Claude Code, Cursor, Copilot). Можливість розвитку в AI-інженерингу на production-фічах.

SushiBang Нова
2 дн. тому

Middle Laravel / Filament Developer

Розробка та підтримка кастомної CRM-системи для доставки з використанням Laravel 12, Filament 5 та Livewire. Спеціаліст займатиметься проектуванням бази даних, розробкою модулів прийому/обробки замовлень, інтеграцією через REST API та оптимізацією. Вимагається глибоке розуміння Laravel, Filament та PostgreSQL, досвід з Livewire та SQL-оптимізацією. Важливі автономність і відповідальність.

PulsePaw
3 дн. тому

Junior Strong/Middle PHP developer

Розробник PHP/Laravel для фінтех-проекту на мікросервісній архітектурі. Відповідатиме за підтримку та покращення кодової бази, оптимізацію продуктивності, роботу з MySQL, Redis, черг. Потрібні 2+ роки комерційної розробки, 1+ років PHP (Laravel), розуміння OOP та SOLID, мінімальні знання HTML/CSS/JS.

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

Bagisto

bagisto/bagisto

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

27,884 v2.4.8 12 15

Lang

laravel-lang/lang

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

7,775 15.33.2 8

Відео за темою