8
votes

Stratége définie par l'utilisateur en Java

Dans mon application Web, au cours d'une modification de l'objet, j'ai besoin d'envoyer un courrier sur les modifications apportées à l'objet. Ma question est de savoir comment écrire un auditeur pour cela. S'il vous plaît donnez-moi un article à ce sujet. Merci


3 commentaires

Essayez 'Custom Event à Java »


Pouvez-vous modifier le code source de la classe d'objets? IAW, pouvez-vous rendre cette classe observable ou avons-nous besoin d'un observateur séparé pour cet objet?


Frère c'était une bonne question vraiment utile +1


4 Réponses :



22
votes

Une implémentation typique pourrait être comme ceci: votre objet est observable. Ainsi, chaque fois, l'une des valeurs (observées) change, un événement est licencié et tous les auditeurs enregistrés sont informés. Un de ces auditeurs seraient désormais conçus pour prendre la notification et créer et envoyer un email (API de mail Java)

Prenons un élégant haricot que nous faisons Observable: p> xxx pré>

L'interface de l'auditeur: p> xxx pré>

l'interface observable: p> xxx pré>

et le courriel: p>

public class Sender implements Listener {

  public void register(Observable observable) {observable.add(this);}
  public void unregister(Observable observable) {observable.remove(this);}

  public void fieldChanged(Object source, String attribute) {
    sendEmail(source, attribute); // this has to be implemented
  }

}


1 commentaires

Je conseillerais d'utiliser une liste CopyOnwriRraRayRayList plutôt que le tableau . Sinon, une mise en œuvre d'auditeur peut potentiellement se retirer lors d'une notification entraînant une exception concrète.



6
votes

Si vous souhaitez simplement savoir sur les propriétés d'un objet modifié, je vous recommanderais d'utiliser un PropertyChangelistener code> . De cette façon, vous pouvez utiliser PropertyChangeSupport code > classe d'utilitaire pour gérer vos instances d'auditeur et le tir des événements. Vous évitez également de réinventer la roue.

Pour plus d'événement sur mesure, je vous recommanderais de définir votre propre interface d'auditeur. P>

STRY> P>

// Create a new instance of our observable MyBean class.
MyBean bean = new MyBean();

// Create a PropertyChangeListener specifically for listening to property "b".
PropertyChangeListener listener = new PropertyChangeListener() {
  public void propertyChange(PropertyChangeEvent evt) {
    assert "b".equals(evt.getPropertyName());
    boolean oldB = (Boolean) evt.getOldValue();
    boolean newB = (Boolean) evt.getNewValue();

    System.err.println(String.format("Property b updated: %b -> %b, oldB, newB));
  }
}

// Register listener with specific property name.  It will only be called back
// if this property changes, *not* the "i" int property.
bean.addPropertyChangeListener("b", listener);


0 commentaires

3
votes

Vous devez utiliser le modèle de conception d'observateur strong>. Ce modèle utilise ces classes:

  • java.util.observable
  • java.util.observer ul>

    Voici un exemple. p>

    L'observateur: p>

    public static void main(String[] args)
    {
        // Create YourObject
        YourObject o = new YourObject();
    
        // create an observer
        EmailObserver emailObserver = new EmailObserver();
    
        // subscribe the observer to your object
        o.addObserver(emailObserver);
    
        // Now you can modify your object, changes will be notified by email
        o.setSomething(...);
    }
    


0 commentaires