Найти в Дзене

Паттерн декорратор

Доброго времени суток. Сегодня у нас на очереди очень интересный паттерн – декоратор. В этой статье мы научимся наделять классы новыми возможностями во время выполнения без лишнего наследования. Декоратор – это структурный паттерн. Такие паттерны отвечают за построение удобных в поддержке и иерархии классов. Декоратор динамически наделяет класс новыми возможностями и является альтернативой множеству подклассов. Некий клиенсткий од обращается к IDataProvider, чтобы записать или вывести данные. IDAtaProvider- это интерфейс или абстрактный класс. Т.е клиент работает по заданному контарту. FileReader – это простая реализация чтения и записи в файл, которая условно лежит под капотом абстракции IDataProvider. Если бы мы пользовались паттерном стратегия, то получилась бы примерно такая структура. На выходе мы получаем несколько классов для работы с файлом и сжатием, с файлом и расшифрованием. Но что, если нам такое не подходит, зачем дублировать один и тот же код. Но мы можем сделать следующ

Доброго времени суток.

Сегодня у нас на очереди очень интересный паттерн – декоратор. В этой статье мы научимся наделять классы новыми возможностями во время выполнения без лишнего наследования.

Декоратор – это структурный паттерн. Такие паттерны отвечают за построение удобных в поддержке и иерархии классов. Декоратор динамически наделяет класс новыми возможностями и является альтернативой множеству подклассов.

Некий клиенсткий од обращается к IDataProvider, чтобы записать или вывести данные. IDAtaProvider- это интерфейс или абстрактный класс. Т.е клиент работает по заданному контарту. FileReader – это простая реализация чтения и записи в файл, которая условно лежит под капотом абстракции IDataProvider. Если бы мы пользовались паттерном стратегия, то получилась бы примерно такая структура.

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

-2

DataProviderDecorator это абстрактный класс, который содержит ссылку на IDataProvider и наследуется от него же. В этом и есть суть декоратора.Он содержит в себе, как агрегацию – ссылку на объект, так и наследуется от него.

-3

Получается мы оборачиваем один объект типа IDataProvider другим. Например FileEncryptor прочитает файл а потом раскодирует, а FileCompressor прочитает файл, а потом сожмет.