【texte】
1. Définition du modèle d'observateur:
Autrement dit, le modèle d'observateur définit une dépendance un-à-plusieurs, permettant à un ou plusieurs objets d'observateurs d'écouter un objet de sujet. De cette façon, lorsque l'état observé change, l'observateur correspondant doit être informé afin que ces objets d'observateurs puissent être automatiquement mis à jour. Par exemple: le mécanisme de traitement des événements dans l'interface graphique adopte le mode observateur.
2. Implémentation du mode observateur:
Sujet (interface d'objet à observer): Spécifie l'interface unifiée de Concretsubject; Chaque sujet peut avoir plusieurs observateurs; Concretsubject (objets observés spécifiques): maintient une liste de références à tous les observateurs spécifiques; Lorsque le statut modifie, une notification sera envoyée à tous les observateurs enregistrés. Observer (interface d'observateur): spécifie l'interface unifiée de ConcreteObserver; Définit une méthode Update (), qui sera appelée lorsque l'état de l'objet observé change. ConcreteObserver: maintient une référence à Concretsubject; L'état spécifique est synchronisé avec le béton du béton; implémente l'interface d'observateur, la fonction de la méthode Update (): Une fois le changement dans le sujet détecté, les informations seront mises à jour.
Le diagramme est décrit comme suit:
Remarque: il y a un ensemble dans la classe observée pour maintenir tous les observateurs.
3. Donnez des exemples:
[Schéma 1]: Définissez l'interface ou la classe vous-même pour implémenter le modèle d'observateur.
Les étapes sont les suivantes:
(1) Définissez l'interface possédée par l'observateur:
package com.vince.observer; interface publique observable {// Inscrivez-vous en tant qu'observateur public void registerObserver (observateur observateur); // Annuler l'observateur public void retireObserver (Observer Observer); // informer tous les observateurs pour mettre à jour les informations publiques void notifyObservers ();}(2) Définir l'observateur spécifique: tasse
package com.vince.observer; import java.util.vector; public class Cup implémente observable {// une liste d'objets d'observateurs maintenus par l'observateur privé vector <Observer> vector = new vector <Observer> (); prix flottant privé; Coupe publique (Prix de flotteur) {this.price = prix; } public float getPrice () {prix de retour; } public void setPrice (Float Price) {// informer tous les observateurs lors de la modification du prix this.price = prix; notifyObservers (); } @Override public void registerObserver (Observer Observer) {// Registre Observer Vector.Add (Observer); } @Override public void removeObserver (Observer Observer) {// Annuler Observer Vector.Remove (Observer); } @Override public void notifyObservers () {// implémenter notifier tous les objets d'observateurs pour (Observer Observer: Vector) {Observer.update (prix); }}}(3) Définir l'interface commune de l'observateur: (la mise à jour des données est bien sûr que le résultat final doit être effectué avec l'observateur)
Package com.vince.observer; Observer d'interface publique {public Void Update (Prix de flotteur); 5}(4) Définir des objets d'observateurs spécifiques:
package com.vince.observer; Public Class Person implémente l'observateur {nom de chaîne privée; Personne publique (nom de chaîne) {this.name = name; } @Override public void Update (Float Price) {System.out.println (nom + "Le prix de la coupe que vous suivez a été mis à jour pour:" + prix); }}(5) Test:
package com.vince.observer; Test de classe publique {public static void main (String [] args) {// Créer un objet d'observateur Cup Doll = new Cup (3000); // Créer deux objets d'observateurs personne P1 = nouvelle personne ("Life 1"); Personne P2 = nouvelle personne ("Life 2"); // Inscrivez-vous en tant qu'observateur Doll.RegisterObserver (P1); Doll.RegisterObserver (P2); System.out.println ("Premier tour de promotion:"); Doll.SetPrice (2698); // Changements de prix System.out.println ("Promotion du deuxième tour:"); Doll.SetPrice (2299); // System.out.println ("Promotion du deuxième tour:"); Doll.SetPrice (1998); Doll.RemoveObserver (P2); // supprimer la vie 2 System.out.println ("Promotion du quatrième tour:"); Doll.SetPrice (1098); }}Après l'exécution, les résultats sont affichés comme suit:
[Schéma 2]: Appelez directement l'API JDK pour l'implémenter.
Les étapes sont les suivantes:
(1) implémenter l'objet d'observateur spécifique en héritant de la classe observable:
package com.vince.observer2; import java.util.observable; public class cup étend observable {prix de flotteur privé; Coupe publique (Prix de flotteur) {this.price = prix; } public float getPrice () {prix de retour; } public void setPrice (Float Price) {this.price = prix; this.Setchanged (); // notification, les données ont changé ce.notifyObservers (); }}(2) Implémentation d'objets d'observateurs spécifiques en implémentant l'interface java.util.observer:
package com.vince.observer2; import java.util.observable; import java.util.observer; la classe de classe publique implémente l'observateur {nom de chaîne privée; Personne publique (nom de chaîne) {this.name = name; } @Override public void Update (observable o, objet arg) {if (o instanceof Cup) {Cup Cup = (Cup) o; System.out.println (Name + "Le prix de la coupe que vous suivez a été mis à jour pour:" + cup.getprice ()); }}}(3) Test:
package com.vince.observer2; test de classe publique {public static void main (String [] args) {Cup Cup = new Cup (3000); Personne P1 = nouvelle personne ("Life 1"); Personne P2 = nouvelle personne ("Life 2"); Cup.Addobserver (P1); Cup.Addobserver (P2); System.out.println ("premier cycle de promotion"); cup.setprice (2988); System.out.println ("deuxième cycle de promotion"); cup.setprice (2698); Cup.deleteObserver (P2); System.out.println ("troisième cycle de promotion"); Cup.setprice (1998); }}Après avoir fonctionné, les résultats sont les suivants:
【Documents du projet】
Lien: http://xiazai.vevb.com/201609/yuanma/javaseguancha(vevb.com).rar
4. Résumé: (le rôle du mode observateur)
Le motif d'observateur crée un couplage abstrait entre l'observateur et l'observateur. Tous les personnages de l'observateur savent qu'une liste spécifique d'observateurs.
Étant donné que l'observateur et l'observateur ne sont pas étroitement couplés ensemble, ils peuvent appartenir à différents niveaux d'abstraction. Si l'observateur et l'observateur sont jetés ensemble, l'objet doit traverser les niveaux d'abstraction et de concrétisation.
Le mode observateur prend en charge la communication de diffusion. L'observateur émettra un avis à tous les observateurs enregistrés.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.