Посредник (Mediator) — различия между версиями

Материал из Вики ИТ мехмата ЮФУ
Перейти к: навигация, поиск
Строка 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 - посредник

Диаграмма классов для примера

MediatorExample.png

Как работает:

  • Изменившийся ListBox вызывает Changed(), который вызывает FontDialogDirector.WidgetChanged().
  • FontDialogDirector.WidgetChanged вызывает GetSelection() для объекта ListBox и затем SetText для связанного объекта TextField

Диаграмма последовательности для примера

MediatorExampleSeq.png

Общая диаграмма классов для паттерна Посредник

MediatorCommon.png