2010-11-16 4 views
0

Support J'ai une classe Java Bean qui tient strictement les champs d'exemple:Est-il approprié d'utiliser le modèle Observateur?

class College 
{ 
    building = "Burruss"; 
    dean = "Mr. Bergess"; 
    schools[] String = {"College of Engineering", "Business School"}; 
    valedictorian = "Mr. Smart Guy"; 
    ... 
    ... 
    ... 
} 

Supposons que pour chaque changement dans une instance de collège, un message est envoyé:

class messageSender 
{ 
     ... if (College values have changed) 
       Send that instance's fields in byte[] form 
} 

Supposons que j'ai Swing GUI (Java) qui vérifie également les changements dans College

class myGUI 
{ 
     ... if (College values have changed) 
       Alert each individual JTextField the updated field 
} 

Le modèle d'observateur est-il pertinent ici? Si college avait 1000 variables, je devrais alors inclure une méthode "notifyObservers()" à chaque fois que les valeurs des champs d'instance changent!

Par exemple, pour ces 1000 variables, j'ai 1000 méthodes setter. Chaque méthode setter doit ensuite avoir un appel notifyObservers().

Est-ce exact ou existe-t-il un meilleur moyen?

Répondre

3

Si vous avez une classe avec 1000 champs, vous avez probablement d'autres problèmes de conception plus pertinents.

Il n'est pas anormal pour chacune de vos méthodes de modification de champ (setters) d'appeler notifyObservers(). Vous pouvez essayer d'encapsuler autant d'état et de logique que vous pouvez cependant; La dissimulation d'information est juste bonne conception.

+0

Veuillez décrire plus de "problèmes de conception pertinents" pour une classe de 1000 champs. Une classe strictement réservée à la conservation des données est-elle dangereuse? –

+1

@Carlo: Non, j'ai confiance que Java pourrait le gérer. C'est très rare que même un simple haricot ait autant de propriétés. C'est généralement une indication qu'une certaine normalisation ou au moins une plus grande division en d'autres classes serait utile. –

0

Je pense que Observer est OK, mais Listener est mieux parce que 1. vous pouvez créer plusieurs types d'auditeurs 2. lorsque l'événement se produit, il est transmis à la méthode de gestionnaire d'écoute, il peut donc savoir ce qui est arrivé. Par exemple, il peut contenir l'un des 1000 champs mentionnés dans le commentaire de Mark.

Questions connexes