Посредник (Mediator) — различия между версиями
Материал из Вики ИТ мехмата ЮФУ
Admin (обсуждение | вклад) |
Admin (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
[[Страница_курса_Паттерны_проектирования| К основной странице курса]] | [[Страница_курса_Паттерны_проектирования| К основной странице курса]] | ||
− | + | === Описание === | |
В большой системе с множеством объектов каждый объект может передавать сообщения другому. В результате этого сильно возрастает количество связей между объектами (n^2). | В большой системе с множеством объектов каждый объект может передавать сообщения другому. В результате этого сильно возрастает количество связей между объектами (n^2). | ||
Вместо этого предлагается завести объект-посредник, через который передавать эти сообщения (n связей) | Вместо этого предлагается завести объект-посредник, через который передавать эти сообщения (n связей) | ||
− | + | === Пример === | |
При выборе поля списка меняется поле ввода | При выборе поля списка меняется поле ввода | ||
Строка 12: | Строка 12: | ||
* FontDialogDirector - '''посредник''' | * FontDialogDirector - '''посредник''' | ||
− | + | ==== Диаграмма классов для примера ==== | |
[[Изображение:MediatorExample.png]] | [[Изображение:MediatorExample.png]] | ||
Строка 19: | Строка 19: | ||
* FontDialogDirector.WidgetChanged вызывает GetSelection() для объекта ListBox и затем SetText для связанного объекта TextField | * FontDialogDirector.WidgetChanged вызывает GetSelection() для объекта ListBox и затем SetText для связанного объекта TextField | ||
− | + | ==== Диаграмма последовательности для примера ==== | |
[[Изображение:MediatorExampleSeq.png]] | [[Изображение:MediatorExampleSeq.png]] | ||
− | + | === Общая диаграмма классов для паттерна Посредник === | |
[[Изображение:MediatorCommon.png]] | [[Изображение:MediatorCommon.png]] |
Версия 15:00, 20 июля 2014
Содержание
Описание
В большой системе с множеством объектов каждый объект может передавать сообщения другому. В результате этого сильно возрастает количество связей между объектами (n^2).
Вместо этого предлагается завести объект-посредник, через который передавать эти сообщения (n связей)
Пример
При выборе поля списка меняется поле ввода
Здесь:
- Widget и его наследники - взаимодействующие через посредника объекты
- FontDialogDirector - посредник
Диаграмма классов для примера
Как работает:
- Изменившийся ListBox вызывает Changed(), который вызывает FontDialogDirector.WidgetChanged().
- FontDialogDirector.WidgetChanged вызывает GetSelection() для объекта ListBox и затем SetText для связанного объекта TextField