Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про PHP: adapter, pattern

В чём заключается паттерн «Адаптер» и каковы основные сценарии его применения?

Проверяет знание структурного паттерна «Адаптер» и умение объяснить, как он позволяет совместить несовместимые интерфейсы.

Короткий ответ

Адаптер — это паттерн, который позволяет двум несовместимым интерфейсам работать вместе. Он "оборачивает" существующий класс и преобразует вызовы в формат, который ожидает клиентский код. Это удобно при интеграции сторонних библиотек, смене API или миграции между системами. Паттерн помогает не переписывать старый код и постепенно переходить на новые реализации.

Длинный ответ

Паттерн «Адаптер»

Определение: Адаптер — это объект-обёртка, который приводит интерфейс одного класса к интерфейсу, ожидаемому клиентским кодом.

1. Зачем нужен адаптер

Когда у вас есть:

  • код, который ожидает определённый интерфейс

  • сторонний класс или сервис с другим интерфейсом

  • необходимость "подружить" их без переписывания логики

Адаптер выступает как "переводчик".

2. Пример проблемы

Есть система, ожидающая интерфейс:

php

interface Logger {
    public function log(string $message): void;
}

Но вы хотите использовать сторонний логгер:

php

class ExternalLogger {
    public function write(string $text) { /* ... */ }
}

Их интерфейсы несовместимы.

3. Как работает адаптер

Создаём класс-обёртку, приводящий интерфейс к нужному:

php

class ExternalLoggerAdapter implements Logger {
    public function __construct(private ExternalLogger $logger) {}

    public function log(string $message): void {
        $this->logger->write($message);
    }
}

Теперь клиентский код может работать с Logger, а адаптер переводит вызовы в формат ExternalLogger.

4. Сценарии применения

  1. Интеграция сторонних библиотек
    Когда потребности вашего кода не совпадают с API библиотеки.

  2. Плавная миграция между версиями API
    Например, при переходе от старой системы логирования к новой.

  3. Унификация интерфейсов
    Например, когда разные поставщики данных предоставляют разные форматы.

  4. Совместимость с устаревшим кодом
    Адаптер позволяет работать с новым кодом, сохраняя старую архитектуру.

  5. Тестирование
    Можно адаптировать классы под интерфейсы, которые удобнее мокать в тестах.

5. Вывод

Адаптер идеально подходит для задач интеграции и нивелирования различий в интерфейсах. Он облегчает миграции и позволяет добавлять новые варианты поведения без переписывания существующего кода.

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    4

Навыки

  • PHP

    PHP

Ключевые слова

#adapter

#pattern

Подпишись на PHP Developer в телеграм

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.