Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Мотивация

Читайте также:
  1. В. Меркантильная мотивация подделок
  2. Г Мотивация подделок в пользу групповых интересов
  3. Д. Пропагандистская мотивация подделок
  4. Е. Мотивация материальной заинтересованности антиквариев в подделке
  5. Ж. Мотивация коллекционирования старинных вещей
  6. Инструментальная мотивация.
  7. Мотивация
  8. Мотивация
  9. Мотивация

Иногда бывает нужно возложить дополнительные обязанности на отдельный объект, а не на класс в целом. Так, библиотека для построения графических ин­терфейсов пользователя должна «уметь» добавлять новое свойство, скажем, рам­ку или новое поведение (например, возможность прокрутки к любому элементу интерфейса).

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

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

Предположим, что имеется объект класса Text View, который отображает текст в окне. По умолчанию Text View не имеет полос прокрутки, поскольку они не всегда нужны. Но при необходимости их удастся добавить с помощью декоратора ScrollDecorator. Допустим, что еще мы хотим добавить жирную сплошную рамку вокруг объекта Text View. Здесь может помочь декоратор BorderDecorat or. Мы просто компонуем оба декоратора с BorderDecorator и получаем искомый результат.

Ниже на диаграмме показано, как композиция объекта Text View с объекта­ми BorderDecorator и ScrollDecorator порождает элемент для ввода текс­та, окруженный рамкой и снабженный полосой прокрутки.


 

Паттерн Decorator

Классы ScrollDecorator и BorderDecorator являются подклассами

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

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

Подклассы Decorator могут добавлять любые операции для обеспечения необ­ходимой функциональности. Так, операция ScrollTo объекта ScrollDecorator

позволяет другим объектам выполнять прокрутку, если им известно о присут­ствии объекта ScrollDecorator. Важная особенность этого паттерна состоит в том, что декораторы могут употребляться везде, где возможно появление самого объекта VisualComponent. Поэтому клиент не может отличить декорированный объект от недекорированного, а значит, и никоим образом не зависит от наличия или отсутствия оформлений.




Дата добавления: 2015-09-11; просмотров: 75 | Поможем написать вашу работу | Нарушение авторских прав

Структурные паттерны | Результаты | Паттерн Adapter | Структурные паттерны | Мотивация | Применимость | Структурные паттерны | Мотивация | Паттерн Composite | Паттерн Composite |


lektsii.net - Лекции.Нет - 2014-2025 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав