Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПИАПС / федоров / Лаб 2 v1.doc
Скачиваний:
59
Добавлен:
17.04.2018
Размер:
358.4 Кб
Скачать

Л а б о р а т о р н а я р а б о т а № 3

«Реализация одного из порождающих шаблонов проектирования»

Цель работы: Применение паттерна проектирования Builder (строитель)

Продолжительность работы - 4 часа.

Содержание

1. Теоретический материал..........................................................................................................1 2. паттерн проектирования Builder (строитель) .....................................................................2 3. Ример реализации паттерна………………….........................................................................4 4. Задание на выполнение лабораторной работы.......................................................................7 5. Требования к отчету................................................................................................................8 6. Вопросы....................................................................................................................................8

Порождающие паттерны.

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

Паттерн Builder (строитель)

Назначение

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

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

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

Применимость

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

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

Структура

Участники

- Builder (TextConverter) - строитель:

- задает абстрактный интерфейс для создания частей объекта Product;

- ConcreteBuilder(ASCIIConverter,TeXConverter,TextWidgetConverter)-конкретный строитель:

- конструирует и собирает вместе части продукта посредством реализации интерфейса Builder;

- определяет создаваемое представление и следит за ним;

- предоставляет интерфейс для доступа к продукту .

- Director (RTFReader) - распорядитель:

- конструирует объект, пользуясь интерфейсом Builder;

- Product (ASCIIText, TeXText, TextWidget) - продукт:

- представляет сложный конструируемый объект. ConcreteBuilder строит внутреннее представление продукта и определяет процесс его сборки;

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

Отношения

- клиент создает объект-распорядитель Director и конфигурирует его нужным объектом-строителем Builder;

- распорядитель уведомляет строителя о том, что нужно построить очередную часть продукта;

- строитель обрабатывает запросы распорядителя и добавляет новые части к продукту;

- клиент забирает продукт у строителя.

Следующая диаграмма взаимодействий иллюстрирует взаимоотношения строителя и распорядителя с клиентом.

Для получения разных представлений некоторых данных с помощью паттерна Builder распорядитель Director должен использовать соответствующие экземпляры ConcreteBuilder. Ранее говорилось о задаче преобразования RTF-документов в документы различных форматов. Для ее решения класс Builder объявляет интерфейсы для преобразования отдельных частей исходного документа, таких как текст, графика и управляющая информация о форматировании, а производные классы WordBuilder, AsciiBuilder и другие их реализуют с учетом особенностей того или иного формата. Так, например, конвертор AsciiBuilder должен учитывать тот факт, что простой текст не может содержать изображений и управляющей информации о форматировании, поэтому соответствующие методы будут пустыми.

По запросу клиента распорядитель Director будет последовательно вычитывать данные из RTF-документа и передавать их в выбранный ранее конвертор, например, AsciiBuilder. После того как все данные прочитаны, полученный новый документ в виде ASCII-теста можно вернуть клиенту. Следует отметить, для того чтобы заменить формат исходных данных (здесь RTF) на другой, достаточно использовать другой класс распорядителя.

Соседние файлы в папке федоров