2011-04-09 3 views
0

Je sais que le pattern Observer n'est pas supporté dans le J2ME car Observer et Observable ne sont pas dans le J2ME.
Alors, est-il possible d'utiliser le pattern Observer dans J2ME? Je veux faire un thread en faisant une logique et quand il a fini son travail notifier le thread principal pour mettre à jour l'interface utilisateur.Observer Pattern dans J2ME

Répondre

1

Le modèle observateur/observable ne nécessite pas de classes spécifiques de la bibliothèque Java. Toutes ces classes implémentent certaines parties du modèle d'observateur pour vous. Vous pouvez rendre vos propres classes observables en gérant vous-même les observateurs. Notez que ce qui suit n'explique pas comment faire attendre un thread pour un autre - c'est un problème différent.

Vous pouvez écrire une interface auditeur comme ceci:

public interface FooListener { 
    void fooChanged(int newValue); 
} 

Vous pouvez gérer un ensemble d'auditeurs dans une classe comme ceci:

public class Foo { 
    private int value = 0; 
    private final Collection<FooListener> listeners = new ArrayList<FooListener>(); 

    public void addFooListener(FooListener listener) { 
     listeners.add(listener); 
    } 

    public void removeFooListener(FooListener listener) { 
     listeners.remove(listener); 
    } 

    public void change(int newValue) { 
     value = newValue(); 

     for (FooListener l : listeners) { 
      l.fooChanged(newValue); 
     } 
    } 

    public int getValue() { 
     return value; 
    } 
} 

Voici un exemple simple de mise en œuvre de l'auditeur.

public class PrintingFooListener implements FooListener { 
    public void fooChanged(int newValue) { 
     System.out.println("New Foo value: " + newValue); 
    } 
} 

Le programme suivant afficherait New Foo value: 10.

public static void main(String[] args) { 
    PrintingFooListener myListener = new PrintingFooListener(); 
    Foo myFoo = new Foo(); 
    foo.addFooListener(myListener); 
    foo.change(10); 
}