Esiste un modo per non utilizzare il pattern Observer durante la creazione di sistemi GUI?

2

In Java, la libreria Swing implementa il modello di progettazione Observer / Subscriber-Publisher per progettare il modo in cui il programma risponde agli eventi sulla GUI (clic del pulsante, ecc.).

Il programmatore registra ActionListener oggetti (gli osservatori) in un elemento della GUI (soggetto / osservabile / editore), e questi oggetti vengono notificati dall'elemento della GUI quando viene modificato lo stato e fanno qualcosa di conseguenza. Questo sembra un modo ragionevole per progettare un sistema GUI, e non riesco a pensare a nessun altro modo in cui un framework possa farlo.

C'è un altro modo per progettare un sistema di risposta agli eventi in una GUI? Esistono framework o librerie in linguaggio imperativo con un sistema di risposta agli eventi della GUI non progettato in questo modo? Il sistema di risposta agli eventi nella libreria C # più comune della C # implementa i problemi di risposta agli eventi usando Observer, o qualcos'altro? Che dire delle librerie per Python, ecc.

    
posta Aviv Cohn 28.03.2014 - 13:56
fonte

2 risposte

2

C'è programmazione reattiva funzionale . L'idea è di trasformare le entità che variano nel tempo in oggetti di prima classe. Supponiamo di avere a che fare con un cursore del mouse e di disegnare un'icona a 10 pixel a destra del cursore. Immagina che ci fosse un tipo TimeVarying<T> che rappresenta un valore che cambia nel tempo. TimeVarying contiene sempre magicamente il valore corrente di quella quantità. Quindi, invece di registrare una richiamata e fare un mucchio di cose imperative per afferrare la posizione corrente del mouse e aggiornare la posizione dell'icona, immagina che la posizione del mouse fosse a TimeVarying<Point> . Quindi, potremmo scrivere qualcosa come ...

iconX = mousePosition.x + 10;

E la variabile iconX sarebbe anche una quantità che varia nel tempo. Ogni volta che cambia la posizione del mouse, iconX cambia, proprio come le celle di un foglio di calcolo. Naturalmente, è necessario che ci sia qualcosa che mantenga tutti questi valori attuali e che diffonda i cambiamenti in modo sicuro ed efficiente.

Per ulteriori dettagli, consulta il documento Disapprovazione del modello di osservatore .

So che esistono quadri di programmazione reattiva funzionale, ma non so se esistono framework maturi per Java.

    
risposta data 28.03.2014 - 14:18
fonte
0

Swing consente anche di ereditare i pannelli e sostituire i metodi Process*Event dalla classe Core del contenitore, tuttavia devi prima abilitare gli eventi.

Questa è solo una buona idea se stai creando un nuovo widget complesso sebbene

    
risposta data 28.03.2014 - 14:14
fonte

Leggi altre domande sui tag