|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jul 2002
Messaggi: 4334
|
[JAVA/Swing] Registro di componenti. Idea buona o cattiva?
A volte serve fare un update di un componente di cui non si ha
la referenza. Passare referenze in giro porta imho a un groviglio orribile di dipendenze, quindi come fare? Ho pensato a una classe singleton che mantiene un registro di componenti di interesse generale, a cui tutte le classi possono accedere, più o meno così: MainPanel mp = ComponentRegistry.getComponent( "MAIN PANEL" ); Secondo voi c'e' qualche controindicazione?
__________________
|Java Base| |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
|
Quote:
"certe volte" ![]() se riesci fammi sapere che ti faccio una statua!!!!! ![]()
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes] "Pirating software? Choose Microsoft!" |
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jul 2002
Messaggi: 4334
|
Come implementazione non è difficile, oggi o domani comincio il refactoring.
A presto!
__________________
|Java Base| |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jul 2002
Messaggi: 4334
|
Una cosa di questo tipo:
Codice:
public class ComponentRegistry { private static final Map<String, Component> map = new HashMap<String, Component>(); private ComponentRegistry() {} public static void bind(String key, Component component) { map.put( key, component ); } public static Set<String> getBoundComponentNames() { return map.keySet(); } public static Component getComponent(String name) { return map.get(name); } } ComponentRegistry.bind( "MAIN_WINDOW", frame ); e si recupera con getComponent: JFrame main = (JFrame) ComponentRegistry.getComponent( "MAIN_WINDOW" ); Naturalmente vanno registrati solo i componenti di particolare interesse, di uso "generale". Se avete idee dite pure.
__________________
|Java Base| Ultima modifica di lovaz : 26-03-2007 alle 17:30. |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
|
Quote:
potresti anche pensare di creare un oggetto e passarlo ai vari oggetti che ne hanno bisogno. La cosa brutta imho del registry, e che rischi l'aliasing dei nomi. Inoltre di devi ricordare ogni volta che ne crei un componente di metterlo dentro. A meno che di far fare la creazione direttamente al registry... Altra soluzione potresti nel tuo getInstance mettere un parametro per capire che vuoi il registro della finestra X, o di un gruppo X. Se l'applicazione è semplice, o cmq non prevede sviluppi futuri lascia perdere queste seghe mentali ![]() Ultima modifica di thebol : 24-03-2007 alle 12:14. |
|
![]() |
![]() |
![]() |
#6 | |||||
Senior Member
Iscritto dal: Jul 2002
Messaggi: 4334
|
Quote:
che ottengo usando direttamente la classe "come fosse un oggetto". Capisco che in fondo è una variabile globale, ma forse la cura (non usarlo) è peggiore del male - a proposito, da dove viene la citazione? Quote:
Quote:
che mi interessa registrare. Se il componente non è registrato ci penserò, magari lancio un'eccezione. Quote:
Quote:
![]()
__________________
|Java Base| |
|||||
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:27.