Cet article décrit l'utilisation du mode observateur pour mettre en œuvre la fonction d'avertissement à haute température du Bureau météorologique. Partagez-le pour votre référence, comme suit:
1. Définition du modèle
Mode d'observateur, également connu sous le nom de mode publication / abonnement. Le modèle d'observateur définit une dépendance un à plusieurs entre les objets. Lorsque l'état d'un objet change, tous les objets qui en dépendent sont notifiés et mis à jour automatiquement.
2. Exemples du modèle
1 analyse de modèle
Nous empruntons l'avertissement à haute température du Bureau météorologique pour illustrer ce modèle.
2 schéma de classe statique du modèle d'observateur
3 exemples de code
3.1 Interface d'observateur-iobserver
package com.demo.observer; import com.demo.subject.isubject; / ** * interface observatrice * @author * * / interface publique iOBServer {// Méthode de mise à jour publique Void Update (sujet ISUBject);}3.2 Interface de sujet-Isubject
Package com.demo.subject; Importer com.demo.observer.iobserver; / ** * interface de rubrique (Observer) * * @author * * / interface publique ISUBject {/ ** * Add Observer * * @param Observer * @return * / public boolean add (iObserver Observer); / ** * Supprimer l'observateur * * @param observateur * @return * / public boolean re Suppor (iObserver Observer); / ** * informer tous les observateurs pour mettre à jour les données * / public void notifyAllObserver (); / ** * Réglez la valeur de la température * * @param température * / public void settemplerature (température du flotteur); / ** * Obtenez un avertissement de température * * @return * / public String TemperaturAreport ();}3.3 Mise en œuvre d'un sujet dans des sujets spécifiques
Package com.demo.subject; import java.util.iterator; import java.util.vector; import com.demo.observer.iobserver; / ** * la classe d'implémentation de thème (observateur) * * @author * * / la classe publique implémente ISUBject {// température / ** * (i) Signal d'alerte jaune à haute température * * NORME ISUBJET: La température maximale sera la température quotidienne de 35 ℃ pour la troisième température de la température jaune * * NORME: NORMADE: La température maximale sera la température quotidienne de 35 ℃ pour 35e température à haute température * jours consécutifs. * * (2) Signal d'alerte orange à haute température * * Standard: la température maximale s'élèvera à plus de 37 ℃ dans les 24 heures. * * (Iii) Signal d'avertissement rouge à haute température * * Standard: la température maximale augmentera à plus de 40 ℃ dans les 24 heures. * / température du flotteur privé; // Niveau d'alerte précoce WarningLevel privé; // Enregistrer la liste d'observateurs Vector privé Vector <IOBServer> Vector; / ** * Construire la méthode Initialize Observer List * / public Subject () {vector = new Vector <IoBserver> (); } / ** * Add Observer * / public boolean add (ioBserver Observer) {if (Observer! = Null &&! Vector.contains (Observer)) {return vector.add (observateur); } return false; } / ** * supprimer l'observateur * / public booléen retire (iObserver Observer) {return vector.remove (observateur); } / ** * Informez tous les observateurs pour mettre à jour les données * / public void notifyAllObserver () {System.out.println ("=========== Le service météorologique libère une température élevée" + this.warninglevel + "Alarm! =========); Iterator <iObserver> Iterator = Vector. (iterator.hasnext ()) {(iterator.next ()). Update (this);}} / ** * La méthode privée définit le niveau d'avertissement en fonction de la valeur de la température et avertit tous "jaune";} else if (this.Temperture> = 37 && this.Temperature <40) {this.warninglevel = "orange"; VOIDE SETHERGE (Float Température) {this.Temperature = Température;3.4 Observer Personal-PersonObserver
package com.demo.observer; import com.demo.subject.isubject; / ** * Observer utilisateur individuel * @Author * * / public class PersonObserver implémente iOBServer {public void Update (iSubject Subject) {System.out.println ("Les individus reçoivent un avertissement de température élevée:" + sujet. }}3.5 Observer Gouvernement Observer
package com.demo.observer; import com.demo.subject.isubject; / ** * Observer des utilisateurs du gouvernement * @Author * * / classe publique GovernmentObserver implémente iOBServer {public void Update (iSubject Subject) {System.out.println ("Département du gouvernement a reçu une haute température:" + sujet. }}3.6 CompanyObserver
Package com.demo.observer; import com.demo.subject.isubject; / ** * Enterprise and Institutions User Observer * @author * * / public class CompanyObserver implémente iOBserver {public void Update (ISUBject Sujet) {System.out.pringaterport ("Entreprises and Institutions reçoit un avertissement de température élevée:" Sujet. }}3.7 Laissez le système commencer à exécuter un client
package com.demo; import java.util.random; import com.demo.observer.companyobserver; import com.demo.observer.governmentobserver; import com.demo.observer; @Author * * / public class Client {/ ** * @param args * / public static void main (String [] args) {// Créer un objet de sujet isUbject sujet = new suject (); // ajouter l'observateur de l'entreprise et de l'institution sujette.add (new CompanyObserver ()); // ajouter l'observateur du sujet d'utilisateur du gouvernement. // ajouter l'observateur de l'utilisateur individuel sujet.add (new PersonObserver ()); Aléatoire aléatoire = nouveau aléatoire (); int i = 0; while (++ i <10) {// définir la température aléatoire Subject.SetTemperature (Random.Nextint (45)); }}}4 Résultats en cours d'exécution
======== Le service météorologique émet une alarme à haute température jaune! ======
Les entreprises et les institutions reçoivent un avertissement à haute température: température: 35.0
Les services gouvernementaux ont reçu un avertissement à haute température: température: 35.0
Les individus reçoivent un avertissement à haute température: température: 35,0
======== Le service météorologique émet une alarme rouge pour une température élevée! ======
Les entreprises et les institutions reçoivent un avertissement à haute température: température: 43.0
Les services gouvernementaux ont reçu un avertissement à haute température: température: 43.0
Les individus reçoivent un avertissement à haute température: température: 43.0
======== Le service météorologique émet une alarme orange à haute température! ======
Les entreprises et les institutions reçoivent un avertissement à haute température: température: 37,0
Les services gouvernementaux ont reçu un avertissement à haute température: température: 37,0
Les individus reçoivent un avertissement à haute température: température: 37,0
3. Les principes de conception de ce modèle
1 principe "ouvert"
2 principe de responsabilité unique
3. Le principe de l'inversion de la dépendance
4. Utiliser des occasions
1 Lorsqu'un modèle abstrait a deux aspects, dont l'un dépend de l'autre, et doit être encapsulé dans des objets indépendants et modifié indépendamment et s'est multiplié.
2 Lorsque le changement d'un objet dans un système nécessite de modifier le contenu des autres objets en même temps, mais vous ne savez pas combien d'objets doivent être modifiés.
3 Lorsque la modification d'un objet doit être informée pour apporter des modifications correspondantes, mais il n'est pas possible de déterminer qui est notifié l'objet.
5. Schéma de classe statique "Données de traction"
La soi-disant «données de poussée» signifie que lorsque l'objet observé change, les données pertinentes sont transmises à l'observateur à travers des paramètres, ce qui forme l'observateur «poussant des données» vers l'observateur. Le diagramme de classe statique est le suivant:
6. Schéma de classe statique "Données de tirage"
La soi-disant «données de traction», l'objet Observer contient une référence à l'instance de l'objet observé. Lorsque l'objet est observé, aucune donnée ne sera transmise à l'observateur. L'observateur obtient activement les données pertinentes en fonction de la référence de l'objet observé. Cela forme l'observateur activement "tire les données" de l'objet observé. Le diagramme de classe statique est le suivant:
Pour plus de contenu lié à Java, les lecteurs qui sont intéressés par ce site peuvent afficher les sujets: "Introduction et tutoriel avancé sur la programmation Java Oriented Oriented", "Tutorial sur la structure de données Java et l'algorithme", "Résumé des compétences de l'opération Java Dom Dom", "Résumé des compétences de l'opération Java et de l'opération de répertoire" et "Résumé de Java Cache Skills"
J'espère que cet article sera utile à la programmation Java de tous.