2012-12-09 11 views
5

In Java efficace, elemento 1, si dice che i metodi di factory statici hanno reso il framework Collections molto più piccolo di quanto sarebbe stato. Qualcuno potrebbe spiegare come? Non riesco a capire come sia possibile solo quanto segue utilizzando metodi statici di fabbrica? Intendo dire che dobbiamo ancora implementare queste implementazioni separate, vero?Metodi di fabbrica statici in java efficace

L'API Collezioni quadro è molto più piccolo di quanto lo sarebbe stato se fosse esportato trentadue classi pubbliche separate, una per ogni implementazione convenienza.

+0

"molto più piccolo" intendi: prestazioni, giusto? –

+1

No. Penso in java efficace, significano dimensioni. Per favore correggimi se sbaglio. –

risposta

2

Con "più piccolo" che significano "meno classi".

Invece di fornire molte classi per ogni variazione di implementazione, sono stati forniti metodi di fabbrica che restituiscono tali implementazioni senza la necessità che le classi vengano dichiarate come classi di livello superiore (meno "classe gonfia").

+0

Puoi spiegare gli svantaggi di avere troppe classi di alto livello? Non sono sicuro di aver capito quella parte della risposta. – Viraj

+0

@viraj troppe classi sono una forma di "ingombro del codice", specialmente quando le classi concrete che avrebbero bisogno di essere necessarie sono effettivamente sapori di poche interfacce. I metodi Factory forniscono anche un'API stabile dietro la quale le classi effettive utilizzate sono libere di essere modificate man mano che la base di codice si evolve. – Bohemian

+0

Correggimi se non l'ho capito bene, nascondere le implementazioni reali (rendendo le classi non pubbliche) dietro le interfacce nei metodi factory aiutano nei casi in cui vuoi cambiare le implementazioni man mano che la base di codice si evolve. Questo significa, diciamo che hai 2 implementazioni per una particolare interfaccia nella versione 1.1, potresti semplicemente rimuovere 1 implementazione del 2 nella versione 1.2? – Viraj

0

Penso che il significato qui sia che ci sono solo implementazioni di base nelle API delle raccolte java, se è necessaria la sincronizzazione, ecc. "Wrapper" sono forniti da fabbriche statiche.

Quindi ci sono 8 implementazioni e senza "wrapper" ci sarebbe di più (guadagno di dimensioni).

Vedere http://docs.oracle.com/javase/7/docs/technotes/guides/collections/overview.html per maggiori dettagli