Che cos'è un utilizzo del mondo reale per il modello di Prototype in Java?

0

Dopo aver studiato il pattern GoF Prototype e preso in esame l'implementazione Java usando il metodo Object#clone() , sono ancora confuso su quando utilizzare questo pattern in un'applicazione reale?

Per favore, fornisci alcuni casi d'uso da applicazioni Java, framework, ecc., se ce ne sono.

    
posta xuesheng 10.07.2018 - 08:27
fonte

3 risposte

3

Pubblicazione del commento come risposta (leggermente elaborata):

Si potrebbe dire una possibile applicazione del mondo reale, quando è necessario creare un foglio di calcolo contenente molte celle. Anziché impostare lo stile per ogni cella appena creata per sovrascrivere gli stili predefiniti, devi utilizzare un modello di Prototipo per creare una cella modello e clonarla quando crei nuove celle.

Questo ti dà il vantaggio aggiuntivo di dire, espandendo la cella modello per creare una versione per mostrare le date e un'altra per mostrare i numeri, senza dover necessariamente conoscere i dettagli precisi della cella del modello. Dovresti semplicemente clonare la cella del modello ed eseguire qualsiasi regolazione tu desideri e usarla come modello specializzato.

In sostanza ti permette di impostare i dettagli dello stile esattamente in un punto del tuo programma, e tali cambiamenti persistono ad ogni nuova cella creata senza sapere esplicitamente come è stilizzata.

Mi viene in mente Apache Poi, sebbene tu possa facilmente applicare il modello Protype senza che la libreria supporti necessariamente un metodo clone creando un wrapper che supporti il clone.

Buona fortuna!

    
risposta data 10.07.2018 - 10:40
fonte
1

A volte è necessario utilizzare il metodo Object completo / grande, ad esempio User oggetto che normalmente viene creato utilizzando la (costosa) query del database

Nel caso in cui si desideri eseguire in batch l'aggiornamento di massa / molti utenti con gli stessi dettagli

Supponiamo che tu debba inviare al metodo DAO l'oggetto User con gli stessi dettagli (aggiornando tutti gli utenti con gli stessi valori) eccetto l'id per ciascun utente.

Invece di creare un oggetto Utente (dal database?) ogni volta che puoi clonare un oggetto e aggiornare solo il suo id.

    
risposta data 10.07.2018 - 12:54
fonte
1

Ecco un esempio del libro GoF stesso. Supponiamo che tu stia sviluppando una struttura GUI / applicazione che, tra le altre cose, fornisce un controllo a pulsante progettato per essere un modo per creare oggetti specifici per l'applicazione . Ciò significa che il framework non può sapere quali sono questi oggetti; invece deve fornire un meccanismo di estensibilità, un modo in cui il codice client può inserirvi. Un modo per farlo è avere gli sviluppatori che usano il framework (per creare la propria applicazione) passare un'istanza prototipica alla classe del pulsante. Ciò consente quindi al pulsante di restituire semplicemente un clone quando viene fatto clic e l'utente finale può quindi procedere a modificare varie proprietà sul clone. Pensa a qualcosa come drag & rilasciare i controlli in un form / window designer. Ora immagina di utilizzare lo stesso framework per creare un editor di note musicali, in cui i pulsanti creano varie note e altri oggetti (che è l'esempio fornito dal libro GoF).

Ci sono altre cose interessanti che puoi fare usando questo approccio. Immagina una specie di applicazione per diagrammi. Puoi fare in modo che i tuoi utenti creino oggetti personalizzati (forme disegnate su misura o oggetti compositi creati con forme predefinite differenti, ecc.) E li salvi come preimpostazione. Quindi puoi caricare un preset come prototipo in un pulsante, e farlo clonare e posizionarlo sulla tela.

    
risposta data 10.07.2018 - 16:01
fonte

Leggi altre domande sui tag