Cam Quach Joel Derstine Mediator: Object Behavioral
Intent MediatorMediator is an object to coordinate state changes between other objects MediatorMediator promotes loose coupling by preventing objects from referring to each other explicitly MediatorMediator allows designers to vary their interactions independently
Problem Goal in OO design is to distribute behavior among objects Distribution will increase reusability # of objects interconnections reusability reusability
Mediator ConcreteMediatorConcreteColleague1ConcreteColleague2 Colleague Solutions Structure Mediator Mediator provides an interface for communicating with Colleague objects Mediator ConcreteMediator implements a cooperative behavior by coordinating the Colleague objects Colleagues send and receive requests from a Mediator object mediator
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
Some complexities? Who do they need to contact When (or how often) do they need to contact What do they need to tell them Duell, “Non-software examples of software design patterns”, Object Magazine, July 1997 ? A Conceptual Example: The Problem I’m landing! Not yet! I’m still taking off!!
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 Conceptual Example: A Solution
GOF, “Design Patterns”, 1995 A Technical Example: The Problem 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? Some issues/questions:
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 ShowDialog() CreateWidgets() WidgetChanged(Widget) FontDialogDirector CreateWidgets() WidgetChanged(Widget) Widget Changed() ListBox GetSelection() EntryField SetText() director list field
ConsequencesMediator Limits subclassing Decouples colleagues Simplifies object protocols Abstracts how objects cooperate Centralizes control