Декоратор как альтернатива созданию подклассов с целью расширения функциональности. Декоратор переадресует запросы внутреннему компоненту, но может выполнять и дополнительные действия до или после переадресации. Поскольку декораторы прозрачны, они могут вкладываться друг в друга, добавляя тем самым какое-угодно число новых возможностей.
Задания по вариантам:
Создать интерфейс Шифровальщик строк, описывающий шифрование строки. Создать класс, использующий Аффиный шифр для шифрования строк. Создать декораторы использующие шифрование Цезаря и шифрование Виженера. Продемонстрировать шифрование сочетанием методов.
Создать интерфейс Форматирование текста, описывающий форматирование текста. Создать класс, выполняющий выравнивание строк текста по заданной ширине. Создать декоратор, делающий отступ в первой строке текста и декоратор, нумерующий строки текста. Продемонстрировать форматирование текста с различным набором декораторов.
Создать интерфейс Форматирование даты, описывающий форматирование даты в виде строки вида гггг.мм.дд чч.мм.сс (чч изменяются от 0 до 24). Создать класс выполняющий приведение даты к виду дд.мм.гггг чч.мм.сс. Создать декоратор, выполняющий замену номера месяца в дате на название месяца и замену разделителей "." на пробелы и декоратор, преобразующий представление времени в формат, в котором часы меняются от 0 до 12. Продемонстрировать форматирование даты с различным набором декораторов.
Создать интерфейс Описание "окна", описывающий свойства "окна". Создать класс, описывающий простое "окно" в виде прямоугольника. Создать декоратор, добавляющий в описание заголовок и строку статуса и декоратор, добавляющий в описание Меню. Продемонстрировать описание с различным набором декораторов.
Создать интерфейс Описание железнодорожного переезда, описывающий оборудование переезда. Создать класс, описывающий простой не регулируемый переезд. Создать декоратор, добавляющий в описание светофор на переезде и декоратор, добавляющий в описание автоматически срабатывающие препятствия. Продемонстрировать описание с различным набором декораторов.
Создать интерфейс Поиск слова в тексте, описывающий метод поиска слова в тексте. Создать класс, выполняющий поиск по полному совпадению с учётом регистра. Создать декоратор, выполняющий поиск по части слова и декоратор, выполняющий поиск без учёта регистра. Продемонстрировать поиск с различным набором декораторов.
Создать интерфейс Поиск кратчайшего пути в графе, описывающий метод поиска кратчайшего пути в графе. Создать класс, выполняющий поиск пути, содержащего наименьшее количество вершин. Создать декоратор, выполняющий поиск пути проходящего через заданные вершины и декоратор, выполняющий поиск пути с учётом весов рёбер графа. Продемонстрировать поиск с различным набором декораторов.
Создать интерфейс Операция над матрицей. Создать класс, выполняющий сложение матриц. Создать декоратор, выполняющий умножение матрицы на число и декоратор, выполняющий вычитание матриц. Продемонстрировать операции с различным набором декораторов.
Создать интерфейс Операция над множеством. Создать класс, выполняющий операцию объединение множеств. Создать декоратор, выполняющий операцию пересечение множеств и декоратор, выполняющий операцию разность множеств. Продемонстрировать операции с различным набором декораторов.
Создать интерфейс Операция над векторами. Создать класс, выполняющий операцию сложения векторов. Создать декоратор, выполняющий операцию вычитания векторов и декоратор, выполняющий операцию умножения вектора на число. Продемонстрировать операции с различным набором декораторов.
Создать интерфейс Операция над комплексным числом. Создать класс, выполняющий операцию сложения комплексных чисел. Создать декоратор, выполняющий операцию вычитания комплексных чисел и декоратор, выполняющий операцию умножения комплексных чисел. Продемонстрировать операции с различным набором декораторов.
Создать интерфейс Преобразование одномерного массива. Создать класс, выполняющий удаление заданных элементов из массива. Создать декоратор, выполняющий замену заданных элементов массива, на заданный элемент и декоратор, выполняющий медианную фильтрацию массива. Продемонстрировать операции с различным набором декораторов.
Задание, проиллюстрированное в примере:
Создать интерфейс Шифровальщик строк, описывающий шифрование строки. Создать класс, использующий Аффиный шифр для шифрования строк. Создать декораторы использующие шифрование Цезаря и шифрование Виженера. Продемонстрировать шифрование сочетанием методов.
Задания по вариантам:
Создать интерфейс Форматирование текста, описывающий форматирование текста. Создать класс, выполняющий выравнивание строк текста по заданной ширине. Создать декоратор, делающий отступ в первой строке текста и декоратор, нумерующий строки текста. Продемонстрировать форматирование текста с различным набором декораторов.
Создать интерфейс Форматирование даты, описывающий форматирование даты в виде строки вида гггг.мм.дд чч.мм.сс (чч изменяются от 0 до 24). Создать класс выполняющий приведение даты к виду дд.мм.гггг чч.мм.сс. Создать декоратор, выполняющий замену номера месяца в дате на название месяца и замену разделителей "." на пробелы и декоратор, преобразующий представление времени в формат, в котором часы меняются от 0 до 12. Продемонстрировать форматирование даты с различным набором декораторов.
Создать интерфейс Описание "окна", описывающий свойства "окна". Создать класс, описывающий простое "окно" в виде прямоугольника. Создать декоратор, добавляющий в описание заголовок и строку статуса и декоратор, добавляющий в описание Меню. Продемонстрировать описание с различным набором декораторов.
Создать интерфейс Описание железнодорожного переезда, описывающий оборудование переезда. Создать класс, описывающий простой не регулируемый переезд. Создать декоратор, добавляющий в описание светофор на переезде и декоратор, добавляющий в описание автоматически срабатывающие препятствия. Продемонстрировать описание с различным набором декораторов.
Создать интерфейс Поиск слова в тексте, описывающий метод поиска слова в тексте. Создать класс, выполняющий поиск по полному совпадению с учётом регистра. Создать декоратор, выполняющий поиск по части слова и декоратор, выполняющий поиск без учёта регистра. Продемонстрировать поиск с различным набором декораторов.
Создать интерфейс Поиск кратчайшего пути в графе, описывающий метод поиска кратчайшего пути в графе. Создать класс, выполняющий поиск пути, содержащего наименьшее количество вершин. Создать декоратор, выполняющий поиск пути, проходящего через заданные вершины, и декоратор, выполняющий поиск пути с учётом весов рёбер графа. Продемонстрировать поиск с различным набором декораторов.
Создать интерфейс Операция над матрицей. Создать класс, выполняющий сложение матриц. Создать декоратор, выполняющий умножение матрицы на число и декоратор, выполняющий вычитание матриц. Продемонстрировать операции с различным набором декораторов.
Создать интерфейс Операция над множеством. Создать класс, выполняющий операцию объединение множеств. Создать декоратор, выполняющий операцию пересечение множеств и декоратор, выполняющий операцию разность множеств. Продемонстрировать операции с различным набором декораторов.
Создать интерфейс Операция над векторами. Создать класс, выполняющий операцию сложения векторов. Создать декоратор, выполняющий операцию вычитания векторов и декоратор, выполняющий операцию умножения вектора на число. Продемонстрировать операции с различным набором декораторов.
Создать интерфейс Операция над комплексным числом. Создать класс, выполняющий операцию сложения комплексных чисел. Создать декоратор, выполняющий операцию вычитания комплексных чисел и декоратор, выполняющий операцию умножения комплексных чисел. Продемонстрировать операции с различным набором декораторов.
Создать интерфейс Преобразование одномерного массива. Создать класс, выполняющий удаление заданных элементов из массива. Создать декоратор, выполняющий замену заданных элементов массива, на заданный элемент и декоратор, выполняющий медианную фильтрацию массива. Продемонстрировать операции с различным набором декораторов.
Создать интерфейс Автомобиль. Создать класс ПростойАвтомобиль, содержащий основные свойства автомобиля. Создать декоратор СпортивныйАвтомобиль, дополняющий класс ПростойАвтомобиль свойствами спортивного. Создать декоратор ГрузовойАвтомобиль, дополняющий класс ПростойАвтомобиль свойствами грузовика. Продемонстрировать операции с различным набором декораторов.
Создать интерфейс Ёлка. Создать класс НовогодняяЁлка, содержащий основные свойства Ёлки. Создать декоратор ЁлочнаяЗвезда, дополняющий класс НовогодняяЁлка ёлочной звездой. Создать декоратор ЁлочнаяМишура, дополняющий класс НовогодняяЁлка ёлочной мишурой. Создать декоратор ЁлочнаяГирлянда, дополняющий класс НовогодняяЁлка ёлочной гирляндой. Продемонстрировать операции с различным набором декораторов.
Создать интерфейс ОкноПрограммы. Создать класс ПростоеОкноПрограммы, содержащий основные свойства программного окна. Создать декоратор ОкноПрограммыСМеню, дополняющий класс ПростоеОкноПрограммы меню. Создать декоратор ОкноПрограммыСоСтрокойСтатуса, дополняющий класс ПростоеОкноПрограммы строкой статуса. Создать декоратор ОкноПрограммыСБоковушкой, дополняющий класс ПростоеОкноПрограммы боковой панелью. Продемонстрировать операции с различным набором декораторов.
Создать интерфейс Пицца. Создать класс ПростаяПицца, содержащий основные свойства пиццы. Создать декоратор ПиццаССыром, дополняющий класс ПростаяПицца сыром. Создать декоратор ПиццаСГрибами, дополняющий класс ПростаяПицца грибами. Создать декоратор ПиццаСПерцем, дополняющий класс ПростаяПицца перцем. Продемонстрировать операции с различным набором декораторов.
Создать интерфейс Сериализатор. Создать класс ПростойСериализатор, выполняющий сохранение данных в файле. Создать декоратор СериализаторСКодированием, дополняющий класс ПростойСериализатор кодированием данных. Создать декоратор СериализаторСАрхивацией, дополняющий класс ПростойСериализатор архивацией данных. Продемонстрировать операции с различным набором декораторов.
Создать интерфейс Квадрат. Создать класс ПростойКвадрат, выполняющий отрисовку прозрачного квадрата чёрной сплошной линией. Создать декоратор ЗакрашенныйКвадрат, дополняющий класс ПростойКвадрат закрашиванием. Создать декоратор КвадратСТенью, дополняющий класс ПростойКвадрат тенью. Продемонстрировать операции с различным набором декораторов.
Создать интерфейс Часы. Создать класс ПростыеЧасы, выполняющий вывод текущего времени. Создать декоратор Секундомер, дополняющий класс ПростыеЧасы секундомером. Создать декоратор Будильник, дополняющий класс ПростыеЧасы будильником. Продемонстрировать операции с различным набором декораторов.
Создать интерфейс Дом. Создать класс ПростойДом, выполняющий вывод информации о доме. Создать декоратор ДомСЦоколем, дополняющий класс ПростойДом описанием цокольного этажа. Создать декоратор ДомСМансардой, дополняющий класс ПростойДом описанием мансарды. Продемонстрировать операции с различным набором декораторов.
Создать интерфейс Кофе. Создать класс ПростойКофе, выполняющий вывод информации о вкусе кофе. Создать декоратор Экспрессо, дополняющий класс ПростойКофе описанием вкуса экспрессо. Создать декоратор ВанильныйКофе, дополняющий класс ПростойКофе описанием вкуса ванильного кофе. Продемонстрировать операции с различным набором декораторов.