Что такое декоратор пример в io

Декорирование классов java.io

Трудно переоценить значимость пакета java.io: он поддерживает систему ввода-вывода в Java. В качестве источника ввода или места вывода могут выступать файл, сетевое соединение, консоль. Все устройства описываются единой абстракцией – потоком (stream).

В пакете java.io множество классов и интерфейсов, предназначенных для работы с байтовыми и символьными потоками, сериализацией объектов. Их разнообразие по началу может смущать, а последовательность использования не выглядит очевидной. Помочь с осмыслением может Декоратор.

Паттерн Декоратор динамически наделяет объект новыми возможностями и является гибкой альтернативой субклассированию в области расширения функциональности.

Теперь взглянем на часть иерархии классов в java.io.

Что такое декоратор пример в io. Смотреть фото Что такое декоратор пример в io. Смотреть картинку Что такое декоратор пример в io. Картинка про Что такое декоратор пример в io. Фото Что такое декоратор пример в io

На схеме InputStream – абстрактный компонент. Конкретные компоненты: FileInputStream, StringBufferInputSteam, ByteArrayInputStream, ObjectInputStream и др.

Абстрактный декоратор – FilterInputStream, его потомки – конкретные декораторы:

Иногда бывает полезным создать свою систему декораторов. Предположим, необходимо организовать поиск файлов в каталоге.
Используем следующие фильтры:

В примере ниже осуществляется поиск всех текстовых файлов, в имени которых встречаются “io” и “java”, с длинной имени файла не меньше 4:

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

Идея и определение паттерна из книги Эрика Фримен и Элизабет Фримен«Паттерны проектирования».

Если Вам понравилась статья, проголосуйте за нее

Голосов: 10 Голосовать Что такое декоратор пример в io. Смотреть фото Что такое декоратор пример в io. Смотреть картинку Что такое декоратор пример в io. Картинка про Что такое декоратор пример в io. Фото Что такое декоратор пример в io

Источник

Java Blog

Паттерн Декоратор (Decorator) в Java

Паттерн Декоратор (Decorator) относится к структурным паттернам проектирования. С его помощью можно прикрепить дополнительные обязанности к объекту динамически. Декораторы предоставляют гибкую альтернативу подклассам для расширения функциональности.

Простыми словами паттерн Декоратор позволяет динамически изменять поведение объекта во время выполнения, оборачивая их в объект класса декоратора.

В объектно-ориентированном программировании паттерн декоратор является паттерном проектирования, который позволяет добавлять поведение к отдельному объекту, статически или динамически, без влияния на поведение других объектов того же класса. Паттерн декоратор часто полезен для соблюдения принципа единой ответственности, так как он позволяет разделить функциональные возможности между классами с уникальными проблемными областями.

Пример паттерна декоратор на Java

Существует интерфейс Car.

Чтобы сделать из простого автомобиля скоростной спортивный автомобиль у нас есть класс-декоратор SportCar, который в конструкторе принимает класс SimpleCar и добавляет скорости обычному автомобилю.

Также чтобы увеличить грузоподъемность простого автомобиля у нас есть класс-декоратор Truck, который в конструкторе принимает класс SimpleCar и добавляет грузоподъемности обычному автомобилю.

Используем обычный автомобиль SimpleCar, превращая его с помощью декораторов в спортивный автомобиль или грузовик.

Источник

Декоратор на Java

Декоратор — это структурный паттерн, который позволяет добавлять объектам новые поведения на лету, помещая их в объекты-обёртки.

Декоратор позволяет оборачивать объекты бесчисленное количество раз благодаря тому, что и обёртки, и реальные оборачиваемые объекты имеют общий интерфейс.

Особенности паттерна на Java

Сложность:

Популярность:

Применимость: Паттерн можно часто встретить в Java-коде, особенно в коде, работающем с потоками данных.

Примеры Декораторов в стандартных библиотеках Java:

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

Шифрование и сжатие данных

Пример показывает, как можно добавить новую функциональность объекту, не меняя его класса.

Сначала класс бизнес-логики мог считывать и записывать только чистые данные напрямую из/в файлы. Применив паттерн Декоратор, мы создали небольшие классы-обёртки, которые добавляют новые поведения до или после основной работы вложенного объекта бизнес-логики.

Первая обёртка шифрует и расшифрует данные, а вторая — сжимает и распакует их.

Мы можем использовать обёртки как отдельно друг от друга, так и все вместе, обернув один декоратор другим.

Декоратор на других языках программирования

Купи книгу Погружение в Паттерны и получи архив с десятками детальных примеров, которые можно открывать прямо в IDE.

Источник

Паттерн проектирования «Декоратор» / «Decorator»

Почитать описание других паттернов.

Проблема

Возложить дополнительные обязанности (прозрачные для клиентов) на отдельный объект, а не на класс в целом.

Описание

Практическая задача

Используя паттерн «Декоратор», реализуем каркас редактора блок-схем. Будем использовать «Декоратор» для наложения особенностей отрисовки отдельных элементов схем. Рассмотрим два типа блоков — терминальный блок (начало/конец) и блок процессов (описывает одно или несколько действий) и будем их декорировать рамкой и надписью.

Диаграмма классов

Рассмотрим диаграмму классов. AbstractBlock — интерфейс любого блока блок-схемы, имеющий единственный метод — draw(), вызываемый клиентом. Является одновременно и интерфейсом декорируемого объекта и интерфейсом декоратора. TerminatorBlock и ProcessBlock — уточнения абстрактного блока. AbstractBlockDectorator — абстрактный класс декоратора блоков. Обратите внимание, что это именно абстрактный класс, а не интерфейс. Дело в том, что AbstractBlockDecorator, по умолчанию, в методе draw() делегирует соответствующий метод декорируемого объекта. LabelBlockDecorator и BorderBlockDecorator — уточнения декораторов блока, в качестве декоратора меток и рамок. Данные классы переопределяют метод draw() базового класса, добавляя декорируемому объекту новые обязанности (методы drawLabel(), drawBorder()).

Что такое декоратор пример в io. Смотреть фото Что такое декоратор пример в io. Смотреть картинку Что такое декоратор пример в io. Картинка про Что такое декоратор пример в io. Фото Что такое декоратор пример в io

Реализация на Python

По поводу реализации, хотелось бы сделать небольшое замечание. Ввиду того, что Python не поддерживает описание интерфейсов, рекомендуется описывать их как классы, но с обязательным напоминанием программисту, что это именно интерфейс а не абстрактный класс. Напоминание можно сделать в виде исключения NotImplementedError().

def draw(self):
self._decoratee.draw()

class LabelBlockDecorator(AbstractBlockDecorator):
«» » Декорирует блок текстовой меткой
» «»
def __init__(self, decoratee, label):
self._decoratee = decoratee
self._label = label

def draw(self):
AbstractBlockDecorator.draw(self)
self._drawLabel()

class BorderBlockDecorator(AbstractBlockDecorator):
«» » Декорирует блок специальной рамкой
» «»
def __init__(self, decoratee, borderWidth):
self._decoratee = decoratee
self._borderWidth = borderWidth

def draw(self):
AbstractBlockDecorator.draw(self)
self._drawBorder()

# Применим LabelDecorator к терминальному блоку
labelDecorator = LabelBlockDecorator(tBlock, «Label222» )

# Применим BorderDecorator к терминальному блоку, после применения LabelDecorator
borderDecorator1 = BorderBlockDecorator(labelDecorator, 22)

Кто-то, наконец-то дождался примеров на питоне.

Источник

Русские Блоги

[Java io] Режим декоратора и режим адаптера шаблонов проектирования в потоке io

Каталог статей

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

Один, режим декоратора

Определение декоратора (Decorator)
Динамическое расширение функции объекта без изменения исходного класса. Это достигается путем создания упаковывающего объекта, который является украшением, для упаковки реального объекта.

(Метод) Наследование для расширения функциональности: одиночное наследование в java

1. Особенности декоратора

Компонент: это унифицированный интерфейс, а также основной тип украшенных и украшенных классов.
ConcreteComponent: это класс конкретной реализации, а также декорированный класс. Он сам по себе является законченным классом с некоторыми функциями.
Декоратор: это класс оформления, который реализует интерфейс Component, а также поддерживает внутри себя экземпляр ConcreteComponent, который может быть инициализирован конструктором.
ConcreteDecorator: это особый тип декоративного изделия, и каждое декоративное изделие имеет определенный декоративный эффект. Вы можете объявить, какой тип ConcreteComponent украсить через конструктор.
Что такое декоратор пример в io. Смотреть фото Что такое декоратор пример в io. Смотреть картинку Что такое декоратор пример в io. Картинка про Что такое декоратор пример в io. Фото Что такое декоратор пример в io
Примечание. Класс декоратора может иметь много изменений.
1. Единый интерфейс декорированного устройства может быть интерфейсом или абстрактным родительским классом.
2. Декоратор не требуется

2. Пример кода

А. Во-первых, создайте унифицированный интерфейс, который также является основным типом декорированного класса и декорированного класса.

б. Создайте украшение для реализации интерфейса.

c. Создайте конкретный класс реализации

Все три конкретных класса реализации наследуют класс оформления и расширяют исходные функции.
d、TestDome

Результат вывода показывает, что многие другие функции могут быть расширены.Что такое декоратор пример в io. Смотреть фото Что такое декоратор пример в io. Смотреть картинку Что такое декоратор пример в io. Картинка про Что такое декоратор пример в io. Фото Что такое декоратор пример в io

3. Использование в io stream

Два, режим адаптера

1. Знакомство с адаптером

Адаптер: преобразование интерфейса класса в другой интерфейс, который нужен клиенту. Режим адаптера делает исходный интерфейс несовместимым, и классы, которые не могут работать вместе, могут работать вместе.

Режим реализации: адаптер класса и адаптер объекта
1. Используйте наследование (так называемый адаптер класса) для адаптации класса.
2. Используйте композицию (так называемый объектный адаптер) для преобразования исходного интерфейса в целевой интерфейс, заключив объект Adaptee внутрь

Например: бытовая электросеть 220 В, а мобильному телефону только 5 В, это процесс адаптации.
В адаптере задействованы следующие роли:
Target (целевой интерфейс): ожидаемый интерфейс, который будет преобразован (5V)
Адаптируемый (исходная роль): класс 220 В, который необходимо адаптировать
Адаптер: адаптируйте исходную роль к целевому интерфейсу, обычно храните ссылку на исходный интерфейс (или наследуйте исходный интерфейс) и реализуйте целевой интерфейс (220-5).
Клиент (класс клиента): получение услуг через целевую роль.
Что такое декоратор пример в io. Смотреть фото Что такое декоратор пример в io. Смотреть картинку Что такое декоратор пример в io. Картинка про Что такое декоратор пример в io. Фото Что такое декоратор пример в io

Особенности адаптера:
1) Завершите адаптацию путем наследования или внутренней инкапсуляции адаптируемого объекта.
2) Лучшая возможность повторного использования. Система должна использовать существующие классы, но такие интерфейсы не соответствуют потребностям системы. Эти функции могут быть повторно использованы в режиме адаптера.

2. Реализация кода

а. Во-первых, установите целевой интерфейс, который нужен клиенту.

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

C. Первый способ адаптера
Адаптировать USB к TypeC

d, объектный адаптер второго типа
принимает объект адаптера как атрибут адаптера и получает экземпляр через конструктор.

d, купол, приложение

3. Использование адаптеров в потоках ввода-вывода.

// Целевой класс
public abstract class Reader implements Readable,Closeable

// Классы, которые нужно адаптировать
public abstract class InputStream implements Closeable

// Класс адаптера потока преобразования
// Байт операции InputStreamReader
public class InputStreamReader extends Reader <
// класс декодирования
private final StreamDecoder sd;

Пример: (такое же использование, как объектный адаптер)

В-третьих, сходства и различия декораторов и адаптеров.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *