Паттерн "Адаптер" (Adapter) в Java — совместимость с легаси и внешними SDK
Обзор — в структурных паттернах. Здесь — практическая адаптация несовместимого интерфейса под контракт приложения.
Задача паттерна
Adapter позволяет использовать существующий класс, чей интерфейс не совпадает с ожидаемым в системе.
Частый кейс — сторонний SDK или легаси-компонент, который менять нельзя.
Пример
interface NotificationService {
void send(String userId, String text);
}
class LegacySmsGateway {
void sendSms(String phone, String body) {
System.out.println("Legacy SMS -> " + phone + ": " + body);
}
}
class SmsGatewayAdapter implements NotificationService {
private final LegacySmsGateway gateway;
private final UserPhoneResolver resolver;
SmsGatewayAdapter(LegacySmsGateway gateway, UserPhoneResolver resolver) {
this.gateway = gateway;
this.resolver = resolver;
}
@Override
public void send(String userId, String text) {
String phone = resolver.resolve(userId);
gateway.sendSms(phone, text);
}
}
interface UserPhoneResolver {
String resolve(String userId);
}
Клиентский код работает только с NotificationService, не зная о деталях LegacySmsGateway.
Когда использовать
- интеграция внешней библиотеки с неудобным API;
- миграция легаси в новую архитектуру;
- необходимость изолировать внешний контракт в одном месте.
Adapter и Facade
| Adapter | Facade | |
|---|---|---|
| Цель | Преобразовать интерфейс | Упростить доступ к подсистеме |
| Объект | Часто один конкретный компонент | Группа компонентов |
См. также
См. также
Другие статьи этого же раздела в боковом меню (как на странице "О разделе"). Паттерн — это повторяющийся шаблон, узор или схема. Паттерны встречаются повсюду — в природе, архитектуре, поведении людей и, конечно, в программировании. Порождающие паттерны проектирования — это группа шаблонов, направленных на решение задач, связанных с созданием объектов. Структурные паттерны — это группа шаблонов проектирования, решающих задачи организации классов и объектов таким образом, чтобы обеспечить гибкую архитектуру программного обеспечения. Поведенческие паттерны — это группа шаблонов проектирования, которые определяют способы взаимодействия объектов и распределения ответственности между ними. Архитектурные паттерны — это проверенные решения для организации структуры программного обеспечения. Интеграция систем — одна из центральных задач в современной разработке программного обеспечения. Паттерны доменного моделирования представляют собой проверенные решения для организации бизнес-логики в программных системах. Паттерн Strategy в C# — классическая реализация через интерфейс, замена на Func и Action, DI и критерии выбора без лишних абстракций. Паттерн Iterator в C# — ручной IEnumerator, генерация итератора компилятором через yield return, ленивость, LINQ и случаи, когда класс писать всё же нужно. Abstract Factory в C# и .NET — классическая схема через интерфейсы, замена через DI-контейнер, фабричный делегат и keyed services в .NET 8. Паттерн Command в C# — классическая схема, делегаты, MediatR, очередь задач, undo и критерии выбора между объектом команды и простым вызовом сервиса. Паттерн Observer в C# — event и делегаты, IObservable IObserver, слабая связанность, отписка и как не поймать утечки памяти в долгоживущих сервисах.Обзор паттернов проектирования
Порождающие паттерны
Структурные паттерны
Поведенческие паттерны
Архитектурные паттерны
Паттерны интеграции внешних систем
Паттерны проектирования доменных моделей
Стратегия в C#
Итератор в C#
Фабрика в C#
Команда в C#
Наблюдатель в C#