|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2004
Messaggi: 1453
|
[Java] Patten Observer
Come evitare quella lunga lista di if nel metodo update dell'oggetto observer?
Ho bisogno di averere aggiornamenti diversi, al momento nel metodo update ho controlli del tipo public void update(Observable o, Object arg) { if (arg.equals("Aggiungi")) // fai qualcosa else if (arg.equals("Modidifca")) //etc }
__________________
Ciao ~ZeRO sTrEsS~ |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
puoi cambiarla con una lunga lista di funzioni infilata in una mappa. A quel punto il tuo metodo update apparirà come:
Codice:
public void update(Observable o, Object arg) {
functionMap.get(arg).compute();
}
Codice:
public void update(Observable o, Object arg) {
functionMap.get(System.identityHashCode(arg)).compute();
}
Qui si suppone l'esistenza di un'ipotetica classe Function, presumibilmente nella forma: Codice:
public interface Function<R, P> {
R compute(P...args);
}
Codice:
Map<Integer, Function<Object, Object>> functionMap = new HashMap<Integer, Function<Object, Object>>();
functionMap.put("ciao".hashCode(), new Function<Object, Object>() {
public Object compute(Object...args) {
System.out.println("ciao");
}
});
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Mar 2004
Messaggi: 1453
|
Grazie della risposta.
La soluzione che proponi è un buon rimedio per la catena di if, ma ho l'impressione che si continui a delegare troppo la cosa ad un "codice". Stò leggendo questo paper per la notifica di eventi http://www.ubilab.org/publications/p...s-96-event.pdf, sembra un interessante soluzione, resta da capire la fattibilità.
__________________
Ciao ~ZeRO sTrEsS~ |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
E' uguale, dal punto di vista meccanico. Taglia gli if passando funzioni membro.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:43.



















