Java: utilizzo di una singola classe o di più classi per ogni tipo?

7

Al momento ho una classe Java chiamata "nodo" che ha un numero di campi. Quali campi della classe vengono utilizzati dipende da un campo chiamato "tipo". Ci sono quasi 10 tipi di "nodi" (questo può crescere). Mi stavo chiedendo se è bello avere una singola classe per gestire tutti i tipi o avere classi diverse per ogni tipo. Qual è la migliore pratica di programmazione in questi casi? Mi piacerebbe sapere (o un collegamento a domande / esercitazioni simili) come saranno influenzate le prestazioni (come la memoria, ecc.) Se uso una singola classe?

    
posta 500865 31.01.2012 - 20:15
fonte

5 risposte

7

Questo è un caso standard per l'ereditarietà. Non si verificano problemi di prestazioni a causa della sottoclasse. Se si esegue un cast tra sottotipi e super tipi diversi se le istruzioni verranno eseguite in fase di esecuzione e verranno utilizzate per verificare le eccezioni del cast. Nel modello a classe singola è necessario controllare il campo "tipo" ogni volta che si accede a un metodo o campo per vedere se quel particolare "tipo" di nodo ha quei campi disponibili. Anche la memoria non dovrebbe essere un problema, perché creerai lo stesso numero di oggetti sia nel modello a classe singola che nel modello di ereditarietà.

    
risposta data 31.01.2012 - 20:38
fonte
7

Il giveaway è nel nome della tua variabile: type . Stai cercando di rappresentare un tipo usando una variabile quando questo è esattamente ciò che le classi servono. Nel tuo caso prenderemo in considerazione il refactoring di Sostituisci il codice del tipo con sottoclassi .

Ogni sottoclasse dovrebbe contenere i campi pertinenti solo ad essa. Effettuando questo refactoring, il tuo codice sarà più facile da mantenere ed estendere.

Il buon design generalmente trionfa (e di solito aiuta) le prestazioni. In questo caso, non preoccuparti.

    
risposta data 31.01.2012 - 20:40
fonte
0

Questa situazione è il caso perfetto per applicare il modello di fabbrica che in pratica crea la sottoclasse richiesta in base a input specifici. Anche l'ereditarietà non deve essere abusata come modifiche al sottoclasse di super classe fino alle sottoclassi.

    
risposta data 01.02.2012 - 14:14
fonte
-2

Potrebbe essere un decoratore o uno schema di progettazione dello stato o una composizione

dato che qui stiamo parlando di nodi, il pattern composito è un buon candidato e poiché ogni nodo potrebbe comportarsi diversamente a seconda del tipo, potremmo considerare ogni istanza di nodo come stati con diversa gestione di un comportamento più generico o potremmo avere una classe astratta di base per un nodo e diverse classi concrete che sono solo decoratori per fornire funzionalità aggiuntive o comportamenti personalizzati.

link

    
risposta data 31.01.2012 - 20:50
fonte
-4

Direi che puoi usare un modello di progettazione, una sottoclasse o anche una singola classe. Dipende dalla scarsità dei campi.

La maggior parte dei campi o solo alcuni in una singola classe null?

Ci sono molti "tipi" differenti coinvolti?

Queste sono le domande a cui rispondere prima di poter prendere una decisione.

    
risposta data 08.07.2013 - 16:28
fonte

Leggi altre domande sui tag