Presentation is loading. Please wait.

Presentation is loading. Please wait.

Mediator Kensho Tsuchihashi. Mediator Page 2 Table of Contents 1.What is Mediator? 2.What problem does Mediator solve? 3.Advantage and Disadvantage 4.Additional.

Similar presentations


Presentation on theme: "Mediator Kensho Tsuchihashi. Mediator Page 2 Table of Contents 1.What is Mediator? 2.What problem does Mediator solve? 3.Advantage and Disadvantage 4.Additional."— Presentation transcript:

1 Mediator Kensho Tsuchihashi

2 Mediator Page 2 Table of Contents 1.What is Mediator? 2.What problem does Mediator solve? 3.Advantage and Disadvantage 4.Additional information 5.Structure 6.Example 7.Code

3 Mediator Page 3 1. What is Mediator? Mediator is one of the 23 Design Patterns which were selected by the GoF (Gang of Four). Purpose BehaviorStructureCreation Interpreter Template Scope Factory Method Chain of Responsibility Command Iterator Mediator Memento Observer State Strategy Visitor Interpreter Template Class Objects Adapter Bridge Composite Decorator Façade Flyweight Proxy Abstract Factory Builder Prototype Singleton

4 Mediator Page 4 1. What is Mediator? Mediator - Somebody who tries to settle a dispute between other parties. In this context.. Mediator - Pattern that defines simplified communication between classes.

5 Mediator Page 5 1. What is Mediator? More formally.. - Mediator defines an object that encapsulates how a set of objects interact. Mediator promotes loose coupling by keeping objects from reffering to each other explicitly, and it lets you vary their interaction indepently.

6 Mediator Page 6 2. What problem does Mediator solve? What if every objects communicate to each other one by one?

7 Mediator Page 7 2. What problem does Mediator solve? Existence of Mediator makes things much simpler.

8 Mediator Page 8 Object-Oriented Design Motivation  Encourages the distribution of behavior among objects.  As a result, an object structure tends to be many connections between objects; in the worst case, every object ends up knowing each other. (Spaghetti code) Mediator  Is responsible for controlling and coordinating the interactions for a group from referring to each other explicitly. 2. What problem does Mediator solve?

9 Mediator Page 9 Use Mediator when Applicability 2. What problem does Mediator solve?  A set of objects communicate in well-defined but complex ways. The resulting interdependencies are unstructured and difficult to understand.  Reuse 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.

10 Mediator Page 10 3-1. Advantage  Mediator helps clarify how objects interact in a system. 3-2. Disadvantage  Mediator pattern trades complexity of interaction for complexity in the mediator.  Mediator can become more complex than any individual colleague, which makes mediator itself hard to maintain. 3. Advantage and Disadvantage

11 Mediator Page 11  Conductor  Meeting scheduler  Airport control tower  Traffic controller  Stock Market 4. Additional information Analogies

12 Mediator Page 12 5. Structure In UML ConcreteColleague2 ConcreteMediatorColleagueMediator +Mediator

13 Mediator Page 13 6. Example Login Dialog  Select “Guest“ or “Login“.  When user login, input “username“ and “password“.  Press “OK“ or “Cancel“... Looks so simple

14 Mediator Page 14 6. Example But what if with these requirements?  When “Guest“ is selected, “username“and “password“ should be disabled.  When “Login“ is selected, “username“ should be enabled.  When there is no character in “username“, “password“ should be disabled.  When user inputs any characters in “username“, “password“ should be enabled.  When there is any character both in “username“ and “password“, “OK“ should be enabled. If not, “OK“ should be disabled. (When “Guest“ is selected, “OK“ should be enabled.).. pretty complicated!

15 Mediator Page 15 See real program.

16 Mediator Page 16 7. Code 7-1. List of classes NoNameDescription 1MediatorInterface that defines API of mediator 2ColleagueInterface that defines API of member 3ColleagueButtonClass that represents button and implements Colleague Interface 4ColleagueTextFieldClass that represents text field and implements Colleague Interface 5ColleagueCheckboxClass that represents checkbox and implements Colleague Interface 6LoginFrameClass that represents login dialog and implements Mediator Interface 7MainClass that has main

17 Mediator Page 17 7. Code 7-2. Class Diagram > Colleague setMediator setColleagueEnabled ColleagueTextField mediator setMediator setColleagueEnabled textValueChanged TextFieldFrameCheckboxColleagueCheckbox mediator setMediator setColleagueEnabled itemStateChanged ColleagueButton mediator setMediator setColleagueEnabled > Mediator createColleague colleagueChanged LoginFrame checkGuest checkLogin textUser textPass buttonOk buttonCancel createColleague colleagueChanged userpassChanged actionPerformed Button

18 Mediator Page 18 7. Code 7-3. Sequence Diagram : LoginFrame: ColleagueCheckbox: ColleagueTextField: ColleagueButton

19 Mediator Page 19 7. Code 7-4. (1) Mediator public interface Mediator { public abstract void createColleagues(); public abstract void colleagueChanged(); }

20 Mediator Page 20 7. Code 7-4. (2) Colleague public interface Colleague { public abstract void setMediator(Mediator mediator); public abstract void setColleagueEnabled(boolean enabled); }

21 Mediator Page 21 7. Code 7-4. (3) ColleagueButton import java.awt.Button; public class ColleagueButton extends Button implements Colleague { private Mediator mediator; public ColleagueButton(String caption) { super(caption); } public void setMediator(Mediator mediator) { this.mediator = mediator; } public void setColleagueEnabled(boolean enabled) { // Mediator will tell you enabled/disabled setEnabled(enabled); }

22 Mediator Page 22 7. Code 7-4. (4) ColleagueTextField import java.awt.*; public class ColleagueTextField extends TextField implements TextListener, Colleague { private Mediator mediator; public ColleagueTextField(String text, int columns) { super(text, columns); } public void setMediator(Mediator mediator) { this.mediator = mediator; } public void setColleagueEnabled(boolean enabled) { // Mediator will tell you enabled/disabled setEnabled(enabled); setBackground(enabled ? Color.white : Color.lightGray); } public void textValueChanged(TextEvent e) { // If texfield changed, report to Mediator mediator.colleagueChanged(); }

23 Mediator Page 23 7. Code 7-4. (5) ColleagueCheckbox import java.awt.*; public class ColleagueCheckbox extends Checkbox implements ItemListener, Colleague { private Mediator mediator; public ColleagueCheckbox(String caption, CheckboxGroup group, boolean state) { super(caption, group, state); } public void setMediator(Mediator mediator) { this.mediator = mediator; } public void setColleagueEnabled(boolean enabled) { // Mediator will tell you enabled/disabled setEnabled(enabled); } public void itemStateChanged(ItemEvent e) { // If checkbox state changed, report to Mediator mediator.colleagueChanged(); }

24 Mediator Page 24 7. Code 7-4. (6) LoginFrame (1/5) import java.awt.Frame; import java.awt.Label; import java.awt.Color; import java.awt.CheckboxGroup; import java.awt.GridLayout; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; public class LoginFrame extends Frame implements ActionListener, Mediator { private ColleagueCheckbox checkGuest; private ColleagueCheckbox checkLogin; private ColleagueTextField textUser; private ColleagueTextField textPass; private ColleagueButton buttonOk; private ColleagueButton buttonCancel;

25 Mediator Page 25 7. Code 7-4. (6) LoginFrame (2/5) public LoginFrame(String title) { super(title); setBackground(Color.lightGray); setLayout(new GridLayout(4, 2)); // Creating grid 4 x 2 using layout manager createColleagues(); // Creating Colleagues add(checkGuest); // Layout from here add(checkLogin); add(new Label("Username:")); add(textUser); add(new Label("Password:")); add(textPass); add(buttonOk); add(buttonCancel); colleagueChanged(); // Initial setting for enabled/disabled pack(); show(); }

26 Mediator Page 26 7. Code 7-4. (6) LoginFrame (3/5) public void createColleagues() { CheckboxGroup g = new CheckboxGroup(); checkGuest = new ColleagueCheckbox("Guest", g, true); checkLogin = new ColleagueCheckbox("Login", g, false); textUser = new ColleagueTextField("", 10); textPass = new ColleagueTextField("", 10); textPass.setEchoChar('*'); buttonOk = new ColleagueButton("OK"); buttonCancel = new ColleagueButton("Cancel"); // Setting Mediator here checkGuest.setMediator(this); checkLogin.setMediator(this); textUser.setMediator(this); textPass.setMediator(this); buttonOk.setMediator(this); buttonCancel.setMediator(this);

27 Mediator Page 27 7. Code 7-4. (6) LoginFrame (4/5) checkGuest.addItemListener(checkGuest); checkLogin.addItemListener(checkLogin); textUser.addTextListener(textUser); textPass.addTextListener(textPass); buttonOk.addActionListener(this); buttonCancel.addActionListener(this); } // When Colleage notices their change, Mediator judges if each colleague should be enabled/disabled public void colleagueChanged() { if (checkGuest.getState()) { // Guest mode textUser.setColleagueEnabled(false); textPass.setColleagueEnabled(false); buttonOk.setColleagueEnabled(true); } else { // Login mode textUser.setColleagueEnabled(true); userpassChanged(); }

28 Mediator Page 28 7. Code 7-4. (6) LoginFrame (5/5) // textUser or textPass has been changed. Mediator judges if each colleague should be enabled/disabled private void userpassChanged() { if (textUser.getText().length() > 0) { textPass.setColleagueEnabled(true); if (textPass.getText().length() > 0) { buttonOk.setColleagueEnabled(true); } else { buttonOk.setColleagueEnabled(false); } } else { textPass.setColleagueEnabled(false); buttonOk.setColleagueEnabled(false); } public void actionPerformed(ActionEvent e) { System.out.println(e.toString()); System.exit(0); }

29 Mediator Page 29 7. Code 7-4. (7) Main import java.awt.*; import java.awt.event.*; public class Main { static public void main(String args[]) { new LoginFrame("Mediator Sample"); }

30 Mediator Page 30 Sources  http://www.dofactory.com/Patterns/PatternMediator.aspx http://www.dofactory.com/Patterns/PatternMediator.aspx  http://sourcemaking.com/design_patterns/mediator http://sourcemaking.com/design_patterns/mediator  “Introduction to Design Pattern in Java” by Hiroshi Yuki  “Design Pattern” by GoF


Download ppt "Mediator Kensho Tsuchihashi. Mediator Page 2 Table of Contents 1.What is Mediator? 2.What problem does Mediator solve? 3.Advantage and Disadvantage 4.Additional."

Similar presentations


Ads by Google