Шаблоны проектирования

Паттерн — это именованная схема взаимодействия объектов для повторяющейся задачи проектирования. Это не готовый фрагмент кода: роли сохраняются, а классы, границы и детали реализации зависят от системы.

Паттерн полезен как инженерный словарь. Фраза «перед внешним API стоит адаптер» быстрее передаёт устройство решения, если команда одинаково понимает назначение, ограничения и цену Adapter.

Паттерн, принцип и алгоритм

  • принцип задаёт критерий хорошего решения, например зависимость от абстракций;
  • паттерн описывает роли и связи в типовой ситуации;
  • алгоритм определяет последовательность вычислительных шагов;
  • framework предоставляет готовый каркас и управляет жизненным циклом кода.

Назвать класс Factory недостаточно. Нужно показать, какую зависимость скрывает создание и почему обычный конструктор хуже в данном контексте.

Карта выбора

ВопросПервая гипотеза
Как пошагово собрать объект с инвариантами?Строитель Builder
Как оставить подклассу выбор создаваемого типа?Фабричный метод Factory Method
Как создавать согласованное семейство объектов?Абстрактная фабрика Abstract Factory
Как получить вариант из готовой настройки?Прототип Prototype
Как согласовать два несовместимых API?Адаптер Adapter
Как комбинировать дополнительные обязанности?Декоратор Decorator
Как контролировать доступ к объекту?Заместитель Proxy
Как скрыть устройство коллекции при обходе?Итератор Iterator
Как зафиксировать каркас алгоритма?Шаблонный метод Template Method
Как найти обработчика по цепи?Цепочка обязанностей Chain of Responsibility

Три группы

Классификация помогает найти раздел, но не выбирает решение автоматически. Например, Decorator и Chain внешне выглядят как вложенные объекты, однако имеют разные контракты прохождения вызова.

Как разбирать паттерн

  1. Сформулировать проблему без названия паттерна.
  2. Найти изменяющуюся часть и стабильный контракт.
  3. Назвать роли и направление зависимостей.
  4. Проверить, что будет при добавлении нового варианта.
  5. Оценить цену: новые типы, косвенность, состояние и сложность диагностики.
  6. Сравнить с ближайшим паттерном и с простым решением без паттерна.

Что важно на собеседовании

  • объяснить задачу, а не воспроизвести диаграмму;
  • привести небольшой пример из стандартной библиотеки или собственного кода;
  • назвать компромисс и условие, когда паттерн избыточен;
  • отличить похожие решения: Factory Method от простой фабрики, Adapter от Decorator, Template Method от Strategy;
  • видеть паттерны в Java API: Iterable, обёртки потоков, proxy-механизмы.

Связи: Паттерны, Принципы SOLID, Основы ООП.