2012-07-29 15 views
7

Stavo passando per lo schema di progettazione java e ho ottenuto qualche dubbio/domande sul modello di prototipo. Prima lasciami dire quello che ho capito. Prototipo modello di progettazione viene utilizzato per la creazione di oggetti è costoso in termini di memoria o risorse. Quindi in quel caso usiamo il clone di quell'oggetto che è già disponibile. Quindi qual è la differenza tra la creazione di un nuovo oggetto e clone()? Dove memorizza l'oggetto in memoria?java prototype design creazione di oggetti modello

+0

questo potrebbe essere utile per voi http://stackoverflow.com/questions/663079/does-cloning-provide-a-performance-improvement-over-constructors-factory-methods –

risposta

3

Il modello di progettazione del prototipo offre un risparmio di costi di due tipi: risparmio di tempo e risparmio di spazio.

Il risparmio di tempo si presenta in situazioni in cui la creazione di un oggetto richiede un accesso costoso alle informazioni ausiliarie, ad esempio la richiesta di dati di configurazione da un file, un database o una rete. Ad esempio, se stai creando molte pagine da un modello che è memorizzato su un server web, è più economico leggere il modello una volta e clonarlo per ottenere il punto di partenza per ogni nuova pagina, piuttosto che interrogare il server web separatamente per ogni pagina.

I risparmi di memoria derivano dal riutilizzo di oggetti immutabili: se l'originale contiene molte stringhe, la creazione di una nuova istanza richiede sia la creazione di stringhe immutabili completamente nuove, sia la gestione manuale dell'interno delle stringhe. L'uso del modello prototipo evita con grazia questo problema consentendo al clone di condividere le parti immutabili del modello.

4

Il metodo Java clone() crea solo un nuovo oggetto e copia i valori delle variabili membro in esso. In generale, non è né più né meno costoso della creazione di un nuovo oggetto. L'unica volta che clone() potrebbe essere più conveniente rispetto alla creazione di un oggetto con new sarebbe quando il costruttore di un oggetto fa qualcosa di costoso: ad esempio, cosa succederebbe se il costruttore prendesse gli argomenti e li usasse come parte di una query di database? In tal caso, l'utilizzo di clone() sarebbe più economico, in quanto l'operazione di query costosa non si verificherà.

Ci sono altri motivi per utilizzare questo modello di progettazione: soprattutto, quando gli oggetti richiedono una configurazione complicata prima dell'uso che non può essere fatta comodamente in un costruttore. Immagina che un oggetto avesse 20 proprietà da impostare. Se li imposti con i parametri del costruttore, quel costruttore sarebbe orribilmente brutto - immagina un costruttore con 20 parametri! Invece, potresti costruire un oggetto con forse nessun parametro, impostare i 20 valori usando i metodi del mutatore, quindi clone() l'oggetto per creare copie pronte quando necessario. clone() non ha bisogno di parametri, quindi è ovviamente meno brutto. Se avevi bisogno di più copie di diverse versioni di questo oggetto, allora il modello del prototipo diventa attraente.

Problemi correlati