Получить доступ

Какой паттерн лежит в основе конструкции new BufferedInputStream(new GZIPInputStream(new FileInputStream(file)))?

MiddleПаттерны проектирования
Коротко

Decorator: каждая обёртка добавляет один аспект (буферизацию, распаковку) и остаётся тем же InputStream. Комбинацию выбирает клиент во время выполнения — без взрыва числа подклассов.

  • Порядок значим: буферизация снаружи даёт крупные чтения из нижних слоёв
  • close() внешней обёртки закрывает всю цепочку
  • Другие примеры: Collections.unmodifiableList, synchronizedList

А ещё Без декоратора понадобились бы классы BufferedGzipFileInputStream и т. п.

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Пакет java.io — канонический пример Decorator. Каждая обёртка добавляет один аспект (буферизацию, распаковку), сохраняя интерфейс InputStream, а состав комбинации выбирает клиент в рантайме — это избавляет от комбинаторного взрыва подклассов. Практическая деталь: порядок обёрток значим, буферизацию обычно ставят снаружи.

Что хотят услышать

  • Название паттерна и его смысл.
  • Почему не наследование.

Частые ошибки

  • Путать с Chain of Responsibility: там звено может прервать цепочку, декоратор всегда делегирует дальше.
  • Забывать, что Collections.unmodifiableList и synchronizedList — тоже декораторы.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Decorator
  • ✗Adapter
  • ✗Composite
  • ✗Chain of Responsibility

Что спросят дальше

  • Почему порядок обёрток в java.io имеет значение?
  • Чем Decorator отличается от Proxy?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем