Hier ist eine Zusammenfassung des ** Mediator-Musters ** im GoF-Entwurfsmuster.
――Das englische Wort Mediator bedeutet ** Mediator **, aber es ist leichter zu verstehen, wenn Sie es tatsächlich als ** Berater ** betrachten. ――Wenn Sie 10 Mitglieder haben und sich gegenseitig unterweisen, ist die Arbeit verwirrend. In einem solchen Fall sollte sich das Mitglied nur dem Berater melden, wenn sich ein ** Berater ** in einer anderen Position befindet, und die Unterstützung für das Mitglied sollte nur vom Berater erhalten werden. ――Das Mediator-Muster ist eine Methode, mit der Sie durch einen Berater Maßnahmen ergreifen können **.
Ein Programm, das einen Anmeldedialog anzeigt und den aktivierten / deaktivierten Status von Text und Schaltflächen steuert.
Es ist eine Schnittstelle, die als Berater dient.
Mediator.java
public interface Mediator {
public abstract void createColleagues();
public abstract void colleagueChanged();
}
Eine Klasse, die einen Anmeldedialog darstellt. Implementieren Sie die Mediator-Schnittstelle.
LoginFrame.java
import java.awt.CheckboxGroup;
import java.awt.Color;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
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;
public LoginFrame(String title) {
super(title);
setBackground(Color.lightGray);
setLayout(new GridLayout(4, 2));
createColleagues();
add(checkGuest);
add(checkLogin);
add(new Label("Username:"));
add(textUser);
add(new Label("Password:"));
add(textPass);
add(buttonOk);
add(buttonCancel);
colleagueChanged();
pack();
setVisible(true);
}
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");
checkGuest.setMediator(this);
checkLogin.setMediator(this);
textUser.setMediator(this);
textPass.setMediator(this);
buttonOk.setMediator(this);
buttonCancel.setMediator(this);
checkGuest.addItemListener(checkGuest);
checkLogin.addItemListener(checkLogin);
textUser.addTextListener(textUser);
textPass.addTextListener(textPass);
buttonOk.addActionListener(this);
buttonCancel.addActionListener(this);
}
//Jedes College ist durch Benachrichtigung des Colleges gültig/Invalidität beurteilen.
public void colleagueChanged() {
if (checkGuest.getState()) {
// Guest mode
textUser.setColleagueEnabled(false);
textPass.setColleagueEnabled(false);
buttonOk.setColleagueEnabled(true);
} else {
// Login mode
textUser.setColleagueEnabled(true);
userpassChanged();
}
}
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);
}
}
Es ist eine Schnittstelle, um Mitglied zu werden.
Colleague.java
public interface Colleague {
public abstract void setMediator(Mediator mediator);
public abstract void setColleagueEnabled(boolean enabled);
}
Eine Klasse, die eine Schaltfläche darstellt. Implementiert die Colleague-Oberfläche.
ColleagueButton.java
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) {
//Gültig ab Mediator/Die Invalidierung wird angewiesen
setEnabled(enabled);
}
}
Eine Klasse, die ein Kontrollkästchen darstellt (hier ein Optionsfeld). Implementiert die Colleague-Oberfläche.
ColleagueCheckbox.java
import java.awt.Checkbox;
import java.awt.CheckboxGroup;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
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) {
//Gültig ab Mediator/Die Invalidierung wird angewiesen
setEnabled(enabled);
}
public void itemStateChanged(ItemEvent e) {
//Benachrichtigen Sie den Mediator, wenn sich der Status ändert
mediator.colleagueChanged();
}
}
Eine Klasse, die ein Textfeld darstellt. Implementiert die Colleague-Oberfläche.
ColleagueTextField.java
import java.awt.Color;
import java.awt.TextField;
import java.awt.event.TextEvent;
import java.awt.event.TextListener;
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) {
//Gültig ab Mediator/Die Invalidierung wird angewiesen
setEnabled(enabled);
setBackground(enabled ? Color.white : Color.lightGray);
}
public void textValueChanged(TextEvent e) {
//Benachrichtigen Sie Mediator, wenn sich die Zeichenfolge ändert
mediator.colleagueChanged();
}
}
Diese Klasse führt die Hauptverarbeitung durch.
Main.java
public class Main {
static public void main(String args[]) {
new LoginFrame("Mediator Sample");
}
}
Die Logik zum Aktivieren / Deaktivieren der Anzeige ist kompliziert, wird jedoch von der LoginFrame-Klasse vermittelt. Wenn Sie die Anzeigespezifikationen ändern oder einen Fehler finden, müssen Sie nur die LoginFrame-Klasse reparieren und debuggen. Sobald die Logik auf CollegeButton, CollegeCheckbox und CollegeTextField verteilt ist, ist es schwierig, sie zu schreiben, zu debuggen und zu ändern.
Dieser Artikel und das Beispielprogramm wurden basierend auf den folgenden Büchern erstellt.
Es war sehr leicht zu verstehen und ich habe viel gelernt. Vielen Dank. Die detaillierten Erklärungen der Entwurfsmuster und Beispielprogramme sind geschrieben. Schauen Sie sich also auch die Bücher an.
Recommended Posts