Задача: смоделировать систему выдачи талонов в банке, где клиенты получают талоны четырёх типов:Вклады
Кредитные карты / Продукты
Кредиты
Другие вопросы
Каждый тип талона направляется в соответствующее «окошко» (обработчик). Нужно реализовать гибкую, расширяемую систему без жёсткой привязки к конкретным классам. Разберём решение шаг за шагом — от модели до логики обработки. Создадим базовый класс Ticket, который будет содержать: 💡 Мы используем AtomicLong для потокобезопасной генерации ID — важно, если система будет многопользовательской. Вместо простого enum добавим описание и связь с обработчиком: ✅ Преимущество: легко добавить новую категорию — просто новый элемент enum. Каждое «окошко» — это стратегия обработки. Создадим интерфейс: А теперь — конкретные реализации: Каждый обработчик знает только свой тип — это принцип единой ответственности (SRP). Чтобы не создавать обработчики вручную, используем Factory: Теперь соберём всё в рабочую систему: Пример, рассмотренный в статье, мож