Вопрос проверяет понимание паттерна Стратегия для выбора алгоритма взаимодействия с разными банковскими протоколами.
Паттерн Стратегия (Strategy) относится к поведенческим паттернам проектирования. Он определяет семейство алгоритмов, инкапсулирует каждый из них и делает их взаимозаменяемыми. Стратегия позволяет изменять алгоритм независимо от клиентов, которые его используют.
В задаче с разными банками, каждый из которых требует свой протокол (HTTP, gRPC, FTP), паттерн Стратегия идеально подходит. Вы создаете общий интерфейс, например BankProtocol, и несколько реализаций: HttpProtocol, GrpcProtocol, FtpProtocol. Клиентский код (например, сервис отправки платежей) работает с интерфейсом, а конкретная стратегия выбирается на основе конфигурации банка.
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). Вы можете добавлять новые протоколы, не изменяя существующий код. Это особенно полезно в системах, где требуется поддержка множества внешних интеграций с разными техническими требованиями.
Вывод: Используйте Стратегию, когда у вас есть несколько вариантов поведения (алгоритмов) и они могут меняться во время выполнения или конфигурации. В контексте банковских протоколов это позволяет легко адаптироваться к требованиям каждого банка без переписывания основной логики.