Mediator

Mediator: Object Behavioral
Cam Quach
Joel Derstine
Intent
• Mediator is an object to
coordinate state changes
between other objects
• Mediator promotes loose
coupling by preventing
objects from referring to
each other explicitly
• Mediator allows designers
to vary their interactions
independently
Problem
• Goal in OO design is to
distribute behavior
among objects
• Distribution will increase
reusability


# of objects
reusability


interconnections
reusability
Solutions
Mediator
ConcreteMediator
mediator
Colleague
ConcreteColleague1
ConcreteColleague2
Structure
• Mediator provides an interface for
communicating with Colleague objects
• ConcreteMediator implements a cooperative
behavior by coordinating the Colleague
objects
• Colleagues send and receive requests from a
Mediator object
A Conceptual Example:
The Problem
•
Multiple aircraft in the air space of an airport need to communicate
with each other about changes in (some of) their properties (speed,
altitude, direction).
•
Where do the complexities reside if they tried to do this by
communicating with each other directly?
Duell, “Non-software examples of software design patterns”, Object Magazine, July 1997
A Conceptual Example:
The Problem
Some complexities?
•
Who do they need to contact
•
When (or how often) do they need to contact
•
What do they need to tell them
I’m landing!
?
Not yet! I’m still
taking off!!
Duell, “Non-software examples of software design patterns”, Object Magazine, July 1997
A Conceptual Example:
A Solution
A Control Tower (the “mediator”)!
Manages the complexity of communications:
•
Who to contact (observer object?)
•
When to contact
•
What to say
?
Duell, “Non-software examples of software design patterns”, Object Magazine, July 1997
A Technical Example:
The Problem
Some issues/questions:
•
•
•
How should the widgets on this dialog box
communicate?
What are the dependencies?
Each widget knows how to do its job. But should it
know how it fits into the larger picture?
GOF, “Design Patterns”, 1995
A Technical Example:
A Solution
Create a FontDialogDirector Mediator!
•
Knows the widgets in the dialog box
•
Serves as the intermediary (widgets only
know about the mediator).
•
Coordinates their interaction
DialogDirector
director
ShowDialog()
CreateWidgets()
WidgetChanged(Widget)
Changed()
FontDialogDirector
CreateWidgets()
WidgetChanged(Widget)
GOF, “Design Patterns”, 1995
Widget
ListBox
list
GetSelection()
field
EntryField
SetText()
Consequences
Mediator
• Limits subclassing
• Decouples colleagues
• Simplifies object protocols
• Abstracts how objects
cooperate
• Centralizes control