Паттерн Decorator активно используется в пакете java.io. Подклассы InputStream, OutputStream, Reader и Writer принимают в конструкторах экземпляры того же типа, позволяя им оборачивать и расширять объекты дополнительным функционалом. Это даёт гибкое комбинирование функциональности без изменения исходных классов.
Примеры:
BufferedInputStream, оборачивающий InputStreamDataInputStream, добавляющий возможности чтения данныхGZIPInputStream, добавляющий сжатиеКласс java.util.Collections предоставляет несколько статических методов, которые расширяют коллекции дополнительным функционалом:
checkedCollection(), checkedList(), checkedMap() – добавляют типобезопасность через проверку элементов во время выполненияsynchronizedList(), synchronizedMap(), synchronizedSet() – добавляют потокобезопасность через синхронизациюunmodifiableSet(), unmodifiableMap(), unmodifiableList() – создают коллекции только для чтенияЭти методы возвращают тот же тип коллекции, но добавляют защитные обёртки вокруг исходной реализации.
Пакет javax.servlet демонстрирует паттерн Decorator через классы-обёртки:
HttpServletRequestWrapper – оборачивает запросы сервлетаHttpServletResponseWrapper – оборачивает ответы сервлетаЭти классы расширяют базовые интерфейсы запроса/ответа, позволяя разработчикам переопределять конкретные методы и делегировать остальные вызовы обёрнутому объекту — это обеспечивает кастомизацию без изменения исходной реализации.
BufferedInputStream — это Decorator, который оборачивает InputStream для добавления буферизации, сохраняя при этом тот же интерфейс, что и обёрнутый объект.
Новый — ещё не проверен сообществом
Вы