[JAVA] Motif médiateur

Quel est le modèle Mediator?

Un patron pour préparer un "consultant". Les membres qui effectuent le travail informent le conseiller lorsqu'un événement qui se propage à l'ensemble se produit. De plus, nous répondrons docilement aux instructions du conseiller. Le conseiller prend une décision importante en fonction des nouvelles des membres. Donnez des instructions à chaque membre.

Le rôle du médiateur (médiateur, médiateur)

Communiquez avec le rôle de collègue et définissez une interface pour effectuer des ajustements.

package mediator;

public interface Mediator {
	//Générer des membres gérés par ce médiateur
	public abstract void createColleagues();
	//Consultation avec un conseiller
	public abstract void collegueChanged();
}

Le rôle du médiateur concret (médiateur concret, médiateur)

Mettre en place l'interface qui joue le rôle de médiateur et faire les ajustements proprement dits.

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);
		 //Créer une grille 4x2 à l'aide du gestionnaire de disposition
		 setLayout(new GridLayout(4, 2));
		 //Génération de collègues
		 createColleagues();
		 //Placement
		 add(checkGuest);
		 add(checkLogin);
		 add(new Label("User name:"));
		 add(textUser);
		 add(new Label("Password:"));
		 add(textPass);
		 add(buttonOk);
		 add(buttonCancel);
		 //Efficacité/Paramètre initial non valide
		 collegueChanged();
		 //afficher
		 pack();
		 show();
	}

	@Override
	public void createColleagues() {
		//produire
		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(Conseiller)Ensemble de
		checkGuest.setMediator(this);
		checkLogin.setMediator(this);
		textUser.setMediator(this);
		textPass.setMediator(this);
		buttonOk.setMediator(this);
		buttonCancel.setMediator(this);
		//Ensemble d'auditeurs
		checkGuest.addItemListener(checkGuest);
		checkLogin.addItemListener(checkLogin);
		textUser.addTextListener(textUser);
		textPass.addTextListener(textPass);
		buttonOk.addActionListener(this);
		buttonCancel.addActionListener(this);
	}

	//Valable pour les notifications d'un collègue/Juge invalide
	@Override
	public void collegueChanged() {
		if (checkGuest.getState()) {
			//Mode invité
			textPass.setColleagueEnabled(true);
			if (textPass.getText().length() > 0) {
				buttonOk.setEnabled(true);
			} else {
				buttonOk.setEnabled(false);
			}
		} else {
			//Mode de connexion
			textPass.setColleagueEnabled(false);
			buttonOk.setColleagueEnabled(false);
		}
	}

	//Il y a eu un changement dans textUser ou textPass
	//Validité de chaque collège/Juge invalide
	@Override
	public void actionPerformed(ActionEvent e) {
		System.out.println(e);
		System.exit(0);
	}
}

Le rôle du collègue

Définissez une interface pour communiquer avec le rôle Médiateur.

package mediator;

public interface Colleague {
	public abstract void setMediator(Mediator mediator);
	//Correspond à l'instruction provenant du conseiller
	public abstract void setColleagueEnabled(boolean enabled);
}

Le rôle du Concretr College

Implémentez l'interface pour le rôle de collègue.

package mediator;

import java.awt.Button;
/**
 *LoginFrame classe(Interface du médiateur)Et coopérer avec
 *
 */
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;
	}

	//Valable auprès du médiateur/L'invalidation est ordonnée
	@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);
	}

	//Avertir le médiateur lorsque la chaîne change
	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();
	}
}

Dans le programme ci-dessus, la classe LoginFrame, qui est un consultant, détermine si le bouton est actif ou inactif. Chaque membre (ColleagueButton, TextField, CheckBox) informe uniquement le conseiller, et la décision est laissée au conseiller.

https://github.com/aki0207/mediator

Je l'ai utilisé comme référence. Édition révisée augmentée Introduction aux modèles de conception appris en langage Java

Recommended Posts

Motif médiateur
Modèle de médiateur
Modèle de conception ~ Médiateur ~
Modèle de prototype
Motif de souvenir
Modèle d'itérateur
Motif composite
Modèle d'observateur
Modèle de constructeur
Modèle de pont
Modèle de commande
Modèle de constructeur
Modèle de stratégie
Modèle d'itérateur
Modèle de visiteur
Modèle d'adaptateur
Modèle de proxy
Modèle de stratégie
Motif composite
Motif singleton
Motif singleton
Modèle de prototype
Modèle de façade
Motif décorateur
Modèle de poids mouche
Motif décorateur
Motif de façade
Modèle de visiteur
Modèle de pont
modèle d'usine abstrait
Modèle de conception ~ Constructeur ~
[Java] Modèle de stratégie
Modèle de conception ~ Visiteur ~
Modèle de conception Java
modèle de rappel java
Modèle de conception ~ Proxy ~
Modèle de conception ~ État ~
Modèle de méthode d'usine
Modèle de conception ~ Stratégie ~
Modèle de conception ~ Singleton ~
Modèle de conception ~ Composite ~
Modèle de conception (2): constructeur
Modèle de conception (1): AbstractFactory
[Java] Motif singleton
Modèle de conception ~ Commande ~
Modèle d'usine abstraite
Modèle de conception ~ Itérateur ~
Modèle de conception ~ Façade ~
Modèle de conception ~ Pont ~
Modèle de méthode de modèle
Modèle de conception ~ Décorateur ~
Modèle de modèle de méthode
Modèle de conception ~ Interprète ~
Modèle de méthode d'usine
Modèle de conception ~ Observateur ~
Modèle de conception ~ Prototype ~
[Java] Modèle d'adaptateur
Modèle de conception ~ Memento ~
Modèle de conception ~ Adaptateur ~
Modèle de conception ~ Poids mouche ~
Mémo de modèle Java