Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: strategy pattern, design patterns, protocol abstraction, dependency injection

Какой паттерн проектирования подойдёт, если разным банкам нужна разная реализация протокола (HTTP, gRPC, FTP)?

Вопрос проверяет понимание паттерна Стратегия для выбора алгоритма взаимодействия с разными банковскими протоколами.

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

Паттерн Стратегия позволяет определить семейство алгоритмов (протоколов), инкапсулировать каждый и сделать их взаимозаменяемыми. Клиентский код работает через общий интерфейс, а конкретная стратегия выбирается динамически. Это упрощает добавление новых протоколов без изменения существующего кода.

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

Что такое паттерн Стратегия

Паттерн Стратегия (Strategy) относится к поведенческим паттернам проектирования. Он определяет семейство алгоритмов, инкапсулирует каждый из них и делает их взаимозаменяемыми. Стратегия позволяет изменять алгоритм независимо от клиентов, которые его используют.

Применение к банковским протоколам

В задаче с разными банками, каждый из которых требует свой протокол (HTTP, gRPC, FTP), паттерн Стратегия идеально подходит. Вы создаете общий интерфейс, например BankProtocol, и несколько реализаций: HttpProtocol, GrpcProtocol, FtpProtocol. Клиентский код (например, сервис отправки платежей) работает с интерфейсом, а конкретная стратегия выбирается на основе конфигурации банка.

Пример кода на TypeScript

interface BankProtocol {
  send(data: unknown): Promise<void>;
}

class HttpProtocol implements BankProtocol {
  async send(data: unknown) {
    // HTTP-запрос к банку
    console.log('Sending via HTTP', data);
  }
}

class GrpcProtocol implements BankProtocol {
  async send(data: unknown) {
    // gRPC-вызов
    console.log('Sending via gRPC', data);
  }
}

class PaymentService {
  constructor(private protocol: BankProtocol) {}

  async processPayment(data: unknown) {
    await this.protocol.send(data);
  }
}

// Использование
const bankProtocol = new HttpProtocol();
const service = new PaymentService(bankProtocol);
service.processPayment({ amount: 100 });

Преимущества и вывод

Паттерн Стратегия обеспечивает гибкость и соблюдение принципа открытости/закрытости (Open/Closed Principle). Вы можете добавлять новые протоколы, не изменяя существующий код. Это особенно полезно в системах, где требуется поддержка множества внешних интеграций с разными техническими требованиями.

Вывод: Используйте Стратегию, когда у вас есть несколько вариантов поведения (алгоритмов) и они могут меняться во время выполнения или конфигурации. В контексте банковских протоколов это позволяет легко адаптироваться к требованиям каждого банка без переписывания основной логики.

  • Аватар

    Golang Guru

    Maxim Lukyanov

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

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • JavaScript

    JavaScript

  • Node.js

    Node.js

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

#strategy pattern

#design patterns

#protocol abstraction

#dependency injection

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

  • Аватар

    Golang Guru

    Maxim Lukyanov

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