Upload
myra-broome
View
213
Download
0
Embed Size (px)
Citation preview
Amirkabir University of Technology, Computer Engineering Faculty, Intelligent Systems Laboratory
1
Mediator
Abbas Rasoolzadegan
Amirkabir University of Technology, Computer Engineering Faculty, Intelligent Systems Laboratory
2
فرم نمونه براي رزور يک اتاق مهماني در يک هتل
Amirkabir University of Technology, Computer Engineering Faculty, Intelligent Systems Laboratory
3
Interactions
Amirkabir University of Technology, Computer Engineering Faculty, Intelligent Systems Laboratory
4
Next Example: a dialog box in a graphical user interface
Amirkabir University of Technology, Computer Engineering Faculty, Intelligent Systems Laboratory
5
Problem
Object oriented design encourages the distribution of behavior among the various objects increasing reusability (high cohesion) decreasing reusability (high coupling) through
proliferating interactions every object knows about every other
changing the system’s behavior will be difficult
Amirkabir University of Technology, Computer Engineering Faculty, Intelligent Systems Laboratory
6
Solution
Use mediator design pattern Define an object ,mediator, that
encapsulates how a set of objects interact promotes loose coupling by keeping objects from
referring to each other explicitly lets you vary their interaction independently is generally, responsible for controlling and coordinating
the interactions of a group of objects Classification: Object Behavioral
Amirkabir University of Technology, Computer Engineering Faculty, Intelligent Systems Laboratory
7
interactions between the objects of a dialog box through a mediator
Amirkabir University of Technology, Computer Engineering Faculty, Intelligent Systems Laboratory
8
Sequence Diagram
Amirkabir University of Technology, Computer Engineering Faculty, Intelligent Systems Laboratory
9
Events:
1. The list box tells its director that it has changed.
2. The director gets the selection from the list box.
3. The director passes the selection to the entry field.
4. Now that the entry field contains some text, the director enables button(s) for initiating an action.
Amirkabir University of Technology, Computer Engineering Faculty, Intelligent Systems Laboratory
10
Class Diagram
Amirkabir University of Technology, Computer Engineering Faculty, Intelligent Systems Laboratory
12
Applicability
Use the Mediator pattern when a set of objects communicate in well-defined but
complex ways. The resulting interdependencies are unstructured and difficult to understand.
reusing an object is difficult because it refers to and communicates with many other objects.
a behavior that's distributed between several classes should be customizable without a lot of subclassing.
Amirkabir University of Technology, Computer Engineering Faculty, Intelligent Systems Laboratory
13
Structure
Amirkabir University of Technology, Computer Engineering Faculty, Intelligent Systems Laboratory
14
A typical object structure
Amirkabir University of Technology, Computer Engineering Faculty, Intelligent Systems Laboratory
15
Participants
Mediator defines an interface for communicating with
colleague objects ConcreteMediator
implements cooperative behavior, knows and maintains its colleagues
Colleague classes knows its mediator object, communication with
mediator as opposed to other objects
Amirkabir University of Technology, Computer Engineering Faculty, Intelligent Systems Laboratory
16
Consequences
It limits subclassing A mediator localize behavior that otherwise would be
distributed among several objects. Changing this behavior requires subclassing mediator only; colleague classes can be reused as is
It decouples colleagues Vary and reuse independently
It simplifies object protocols Many-to-many interactions are replaced with one-to-many
which are easier to understand, maintain, and extend It abstracts how objects cooperate
Clarify how objects interact in a system It centralizes control
Amirkabir University of Technology, Computer Engineering Faculty, Intelligent Systems Laboratory
17
Disadvantage
Increased complexity of the mediator. Mediator becomes a monolithic structure that
is hard to maintain
Amirkabir University of Technology, Computer Engineering Faculty, Intelligent Systems Laboratory
18
Implementation Issues
Omitting the abstract mediator class When colleagues work with only one mediator
Implement Colleague-Mediator communication using observer pattern a specialized notification (see in sample code)
Amirkabir University of Technology, Computer Engineering Faculty, Intelligent Systems Laboratory
19
Sample Code
class DialogDirector {
public:
virtual ~DialogDirector();
virtual void ShowDialog();
virtual void WidgetChanged(Widget*) = 0;
protected:
DialogDirector();
virtual void CreateWidgets() = 0;
};
class Widget {
public:
Widget(DialogDirector*);
virtual void Changed();
virtual void HandleMouse(MouseEvent& event);
// ...
private:
DialogDirector* _director;
};
void Widget::Changed () {
_director->WidgetChanged(this);
}
class ListBox : public Widget {public:ListBox(DialogDirector*);virtual const char* GetSelection();virtual void SetList(List<char*>* listItems);virtual void HandleMouse(MouseEvent& event);// ...};class EntryField : public Widget {public:EntryField(DialogDirector*);virtual void SetText(const char* text);virtual const char* GetText();virtual void HandleMouse(MouseEvent& event);// ...};class Button : public Widget {public:Button(DialogDirector*);virtual void SetText(const char* text);virtual void HandleMouse(MouseEvent& event);// ...};void Button::HandleMouse (MouseEvent& event) {// ...Changed();}
Amirkabir University of Technology, Computer Engineering Faculty, Intelligent Systems Laboratory
20
class FontDialogDirector : public DialogDirector {public:FontDialogDirector();virtual ~FontDialogDirector();virtual void WidgetChanged(Widget*);protected:virtual void CreateWidgets();private:Button* _ok;Button* _cancel;ListBox* _fontList;EntryField* _fontName;};void FontDialogDirector::CreateWidgets () {_ok = new Button(this);_cancel = new Button(this);_fontList = new ListBox(this);_fontName = new EntryField(this);// fill the listBox with the available font names// assemble the widgets in the dialog}
WidgetChanged ensures that the widgets work together properly:void FontDialogDirector::WidgetChanged (Widget* theChangedWidget) {
if (theChangedWidget == _fontList) {_fontName->SetText(_fontList->GetSelection());} else if (theChangedWidget == _ok) {// apply font change and dismiss dialog
} else if (theChangedWidget == _cancel) {// dismiss dialog}}
Amirkabir University of Technology, Computer Engineering Faculty, Intelligent Systems Laboratory
21
Related Patterns
Façade: Abstracts a subsystem of objects providing a more convenient interface Difference with mediator:
Façade is an structural pattern but mediator is a behavioral pattern
In Façade, Protocol is unidirectional as opposed to mediator. Mediator is a “two-way” version of façade
Façade promotes weak coupling between the subsystem classes and its client but mediator promotes weak coupling between a set of objects
Façade shields clients from subsystem components, but mediator shields objects of a set from each other
Colleagues can communicate with the mediator using the Observer pattern