[JAVA] Vermittlermuster

Was ist das Mediator-Muster?

Ein Muster zur Vorbereitung eines "Beraters". Die Mitglieder, die die Arbeit ausführen, informieren den Berater, wenn ein Ereignis eintritt, das sich auf das Ganze ausbreitet. Darüber hinaus werden wir gehorsam auf Anweisungen des Beraters reagieren. Der Berater trifft eine große Entscheidung auf der Grundlage der Nachrichten der Mitglieder. Geben Sie jedem Mitglied Anweisungen.

Die Rolle des Mediators (Mediator, Mediator)

Kommunizieren Sie mit der Rolle des Kollegen und definieren Sie eine Schnittstelle für Anpassungen.

package mediator;

public interface Mediator {
	//Generieren Sie Mitglieder, die von diesem Mediator verwaltet werden
	public abstract void createColleagues();
	//Beratung mit einem Berater
	public abstract void collegueChanged();
}

Die Rolle des konkreten Vermittlers (konkreter Vermittler, Vermittler)

Implementieren Sie die Schnittstelle, die die Rolle des Mediators spielt, und nehmen Sie die tatsächlichen Anpassungen vor.

package mediator;

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);
		 //Erstellen Sie mit Layout Manager ein 4x2-Raster
		 setLayout(new GridLayout(4, 2));
		 //Generierung von Kollegen
		 createColleagues();
		 //Platzierung
		 add(checkGuest);
		 add(checkLogin);
		 add(new Label("User name:"));
		 add(textUser);
		 add(new Label("Password:"));
		 add(textPass);
		 add(buttonOk);
		 add(buttonCancel);
		 //Wirksamkeit/Ungültige Grundeinstellung
		 collegueChanged();
		 //Anzeige
		 pack();
		 show();
	}

	@Override
	public void createColleagues() {
		//Generieren
		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");
		// Mediator(Berater)Satz von
		checkGuest.setMediator(this);
		checkLogin.setMediator(this);
		textUser.setMediator(this);
		textPass.setMediator(this);
		buttonOk.setMediator(this);
		buttonCancel.setMediator(this);
		//Satz von Zuhörern
		checkGuest.addItemListener(checkGuest);
		checkLogin.addItemListener(checkLogin);
		textUser.addTextListener(textUser);
		textPass.addTextListener(textPass);
		buttonOk.addActionListener(this);
		buttonCancel.addActionListener(this);
	}

	//Gültig für Benachrichtigungen von Kollegen/Richter ungültig
	@Override
	public void collegueChanged() {
		if (checkGuest.getState()) {
			//Gastmodus
			textPass.setColleagueEnabled(true);
			if (textPass.getText().length() > 0) {
				buttonOk.setEnabled(true);
			} else {
				buttonOk.setEnabled(false);
			}
		} else {
			//Anmeldemodus
			textPass.setColleagueEnabled(false);
			buttonOk.setColleagueEnabled(false);
		}
	}

	//TextUser oder textPass wurden geändert
	//Gültigkeit jedes Kollegiums/Richter ungültig
	@Override
	public void actionPerformed(ActionEvent e) {
		System.out.println(e);
		System.exit(0);
	}
}

Die Rolle des Kollegen

Definieren Sie eine Schnittstelle für die Kommunikation mit der Mediator-Rolle.

package mediator;

public interface Colleague {
	public abstract void setMediator(Mediator mediator);
	//Entspricht der Anweisung des Beraters
	public abstract void setColleagueEnabled(boolean enabled);
}

Die Rolle des Concretr College

Implementieren Sie die Schnittstelle für die Rolle des Kollegen.

package mediator;

import java.awt.Button;
/**
 *LoginFrame-Klasse(Mediator-Schnittstelle)Und kooperieren mit
 *
 */
public class ColleagueButton extends Button implements Colleague{
	private Mediator mediator;

	public ColleagueButton(String caption) {
		super(caption);
	}

	@Override
	public void setMediator(Mediator mediator) {
		this.mediator = mediator;
	}

	//Gültig ab Mediator/Die Invalidierung wird angewiesen
	@Override
	public void setColleagueEnabled(boolean enabled) {
		setEnabled(enabled);
	}
}
package mediator;

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);
	}

	@Override
	public void setMediator(Mediator mediator) {
		this.mediator = mediator;
	}

	@Override
	public void setColleagueEnabled(boolean enabled) {
		setEnabled(enabled);
		setBackground(enabled ? Color.white : Color.lightGray);
	}

	//Benachrichtigen Sie Mediator, wenn sich die Zeichenfolge ändert
	public void textValueChanged(TextEvent e) {
		mediator.collegueChanged();
	}

}
package mediator;

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);
	}

	@Override
	public void setMediator(Mediator mediator) {
		this.mediator = mediator;
	}

	@Override
	public void setColleagueEnabled(boolean enabled) {
		setEnabled(enabled);
	}

	@Override
	public void itemStateChanged(ItemEvent e) {
		mediator.collegueChanged();
	}
}

Im obigen Programm bestimmt die LoginFrame-Klasse, bei der es sich um einen Berater handelt, ob die Schaltfläche aktiv oder inaktiv ist. Jedes Mitglied (ColleagueButton, TextField, CheckBox) informiert nur den Berater, und die Entscheidung bleibt dem Berater überlassen.

https://github.com/aki0207/mediator

Ich habe dies als Referenz verwendet. Augmented Revised Edition Einführung in in Java gelernte Entwurfsmuster

Recommended Posts

Vermittlermuster
Vermittlermuster
Entwurfsmuster ~ Mediator ~
Prototypmuster
Erinnerungsmuster
Iteratormuster
Zusammengesetztes Muster
Beobachtermuster
Builder-Muster
Brückenmuster
Befehlsmuster
Builder-Muster
Strategiemuster
Iteratormuster
Besuchermuster
Adaptermuster
Proxy-Muster
Strategiemuster
Zusammengesetztes Muster
Singleton-Muster
Singleton-Muster
Prototypmuster
Fassadenmuster
Dekorationsmuster
Fliegengewichtsmuster
Dekorateur Muster
Fassadenmuster
Besuchermuster
Brückenmuster
abstraktes Fabrikmuster
Entwurfsmuster ~ Builder ~
[Java] Strategiemuster
Entwurfsmuster ~ Besucher ~
Java-Entwurfsmuster
Java-Rückrufmuster
Entwurfsmuster ~ Proxy ~
Entwurfsmuster ~ Zustand ~
Factory Method Pattern
Entwurfsmuster ~ Strategie ~
Entwurfsmuster ~ Singleton ~
Entwurfsmuster ~ Composite ~
Entwurfsmuster (2): Builder
Entwurfsmuster (1): AbstractFactory
[Java] Singleton-Muster
Entwurfsmuster ~ Befehl ~
Abstraktes Fabrikmuster
Entwurfsmuster ~ Iterator ~
Entwurfsmuster ~ Fassade ~
Entwurfsmuster ~ Brücke ~
Muster der Vorlagenmethode
Entwurfsmuster ~ Dekorateur ~
Muster der Vorlagenmethode
Entwurfsmuster ~ Interpreter ~
Factory Method Muster
Entwurfsmuster ~ Beobachter ~
Entwurfsmuster ~ Prototyp ~
[Java] Adaptermuster
Entwurfsmuster ~ Memento ~
Entwurfsmuster ~ Adapter ~
Entwurfsmuster ~ Fliegengewicht ~
Java-Muster-Memo