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

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

Virtual -FontDialogDirector();

Читайте также:
  1. Первым делом необходимо скачать последнюю версию дистрибутиваVirtualBox .

virtual void WidgetChanged(Widget*);

protected:

virtual void CreateWidgets();

private:

Button* _ok; Button* _cancel; ListBox* _fontList; EntryField* _fontNarae;

FontDialogDirector отслеживает все виджеты, которые ранее поместил в ди­алоговое окно. Переопределенная в нем операция CreateWidgets создает вид­жеты и инициализирует ссылки на них:

void FontDialogDirector::CreateWidgets (} { _ok = new Button(this); _cancel = new Button(this); _fontList = new ListBox(this); _fontName = new EntryField(this);

// поместить в список названия шрифтов

// разместить все виджеты в диалоговом окне

Операция WidgetChanged обеспечивает правильную совместную работу виджетов:

voidFontDialogDirector::WidgetChanged (Widget* theChangedWidget

if (theChangedWidget == _fontList) {

_fontName->SetText(_fontList->GetSelection())

} else if (theChangedWidget == _ok) {

// изменить шрифт и уничтожить диалоговое окно

} else if (theChangedWidget == _cancel) { // уничтожить диалоговое окно


 

Паттерн Mediator

Сложность операции WidgetChanged возрастает пропорционально сложнос­ти окна диалога. Создание очень больших диалоговых окон нежелательно и по другим причинам, но в других приложениях сложность посредника может свести на нет его преимущества.

Известные применения

И в ЕТ++ [WGM88], и в библиотеке классов THINK С [Sym93b] применяются похожие на нашего распорядителя объекты для осуществления посредничества между виджетами в диалоговых окнах.

Архитектура приложения в Smalltalk/V для Windows основана на структуре посредника [LaL94]. В этой среде приложение состоит из окна Window, которое содержит набор панелей. В библиотеке есть несколько предопределенных объек­тов-панелей Рапе, например: TextPane, ListBox, Button и т.д. Их можно ис­пользовать без подклассов. Разработчик приложения порождает подклассы только от класса ViewManager (диспетчер видов), отвечающего за обмен информацией между панелями. ViewManager - это посредник, каждая панель «знает» своего диспетчера, который считается «владельцем» панели. Панели не ссылаются друг на друга напрямую.

На изображенной диаграмме объектов показан мгновенный снимок работаю­щего приложения.

В Smalltalk/V для обмена информацией между объектами Рапе и ViewManager используется механизм событий. Панель генерирует событие для получения дан­ных от своего посредника или для информирования его о чем-то важном. С каж­дым событием связан символ (например, #select), который однозначно его идентифицирует. Диспетчер видов регистрирует вместе с панелью селектор метода, который является обработчиком события. Из следующего фрагмента кода видно, как объект ListPane создается внутри подкласса ViewManager и как ViewManager регистрирует обработчик события #select:

self addSubpane: (ListPane new paneName: 'myListPane'; owner: self; when: #select perform: #listSelect:).


 

Паттерны поведения

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

Аналогичным образом посредник применяется в графических редакторах Unidraw [VL90], где используется класс CSolver, следящий за соблюдением огра­ничений связанности между коннекторами. Объекты в графических редакторах могут быть визуально соединены между собой различными способами. Коннекто­ры полезны в приложениях, которые автоматически поддерживают связанность, например в редакторах диаграмм и в системах проектирования электронных схем. Класс CSolver является посредником между коннекторами. Он разрешает огра­ничения связанности и обновляет позиции коннекторов так, чтобы отразить изме­нения.




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

Результаты | Назначение | Применимость | Паттерны поведения | Паттерн Interpreter | Назначение | Паттерны поведения | Паттерн Iterator | Паттерны поведения | Паттерны поведения |


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