Partage de technologie

Modèle de conception - Modèle d'observateur

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. L'idée centrale du modèle d'observateur

Le modèle Observer est également connu sous le nom de modèle Publier/Abonner. GOF définit le modèle d'observateur comme suit : Définissez une relation de dépendance un-à-plusieurs entre les objets, permettant à plusieurs objets observateurs de se concentrer sur le même objet en même temps. Lorsque l'état de l'objet change, tous les objets qui en dépendent le reçoivent. Notifié et mis à jour automatiquement.
Comme le montre la figure ci-dessous, le modèle d'observateur contient 5 types d'objets.
Insérer la description de l'image ici

  • Interface cibleSujet: L'interface cible définit trois interfaces : ajouter un observateur attach(), supprimer un observateur detach() et notifier les observateurs notifyObservers(), et définir sa propre fonction d'opération opération().
  • Classe cible abstraiteAbstractSubject: Cette classe définit un vecteur d'objet de collection d'observateurs, qui est utilisé pour stocker la liste des objets observateurs ajoutés ; et implémente trois fonctions pour mettre à jour : ajouter un observateur attach(), supprimer un observateur detach() et notifier les observateurs notifyObservers() Cette liste également. demande à tous les objets observateurs de se mettre à jour.
  • Classe cible spécifique MySubect: Héritez de la classe cible abstraite AbstractSubiect et écrivez une fonction d'opération spécifique pour implémenter Operation(). Dans cette fonction, notifyObservers() peut être appelé pour avertir tous les observateurs de se mettre à jour.
  • Interface Observateur Observateur: Définissez une interface unifiée update() pour les objets qui doivent être notifiés lorsque la classe cible change. Lorsque notifyObservers() est appelé, la fonction update() sera appelée pour se mettre à jour.
  • observateur concret : Plusieurs objets observateurs peuvent être définis, tels que Observer1 et Observer2, pour écrire des fonctions de mise à jour unifiées. Client Test peut implémenter la surveillance en ajoutant un observateur Observer à la classe Subject.

Examinons la mise en œuvre spécifique.

(1) Interface Observer Observer.java définit une interface de mise à jour unifiée update(). Son code source est affiché dans le programme suivant.

package behavior.observer;


/**
* @author Minggg
* 观察者接口
*/
public interface Observer {

	public void update();
}

(2) La classe d'implémentation d'observateur Observer1.java est une implémentation spécifique d'un observateur, et sa fonction de mise à jour est utilisée pour afficher une chaîne sur la console. Son code source est affiché dans le programme suivant.

package behavior.observer;


/**
* @author Minggg
* 具体观察者
*/
public class Observer1 implements Observer {

	public void update(){ 
		System.out.println("观察者1得到通知!");
	}
}

(3) La classe d'implémentation d'observateur Observer2.java est une implémentation spécifique d'un autre observateur, et sa fonction de mise à jour est utilisée pour afficher une chaîne sur la console. Son code source est affiché dans le programme suivant.

package behavior.observer;


/**
* @author Minggg
* 具体观察者
*/
public class Observer2 implements Observer {

	public void update(){ 
		System.out.println("观察者2得到通知!");
	}
}

(4) L'interface observée Subject.java définit trois fonctions d'interface pour les observateurs opérationnels et définit une interface de fonction opérationnelle spécifique pour représenter ses propres fonctions. Son code source est affiché dans le programme suivant.

package behavior.observer;


/**
* @author Minggg
* 被观察者接口
*/
public interface Subject {

	// 增加观察者
	public void attach(Observer observer);
	// 删除观察者
	public void detach(Observer observer);
	// 通知所有观察者
	public void notifyObservers();
	// 自身的操作接口
	public void operation();
}

(5) La classe abstraite observée AbstractSubject.java fournit un vecteur de liste de vecteurs pour enregistrer tous les objets observateurs et écrire des fonctions d'implémentation pour faire fonctionner les objets de liste. Son code source est affiché dans le programme suivant.

package behavior.observer;

import java.util.Enumeration;
import java.util.Vector;


/**
* @author Minggg
* 被观察者抽象类
*/
public abstract class AbstractSubject implements Subject {

	private Vector