Qual è il punto del modello di progettazione Prototype?

2

Quindi sto imparando i modelli di progettazione a scuola. Molti di loro sono idee sciocche, ma risolvono comunque alcuni problemi ricorrenti (singleton, adattatori, polling asincrono, ecc.). Ma oggi mi è stato detto del cosiddetto modello di design "Prototipo".

Devo mancare qualcosa, perché non ne vedo alcun beneficio. Ho visto persone online dire che è più veloce dell'utilizzo di "nuovo", ma questo non ha alcun senso, poiché a un certo punto, indipendentemente da come viene creato il nuovo oggetto, la memoria deve essere allocata per esso ect.

Inoltre, questo schema non funziona negli stessi cerchi del problema "pollo o uovo"? Con questo intendo, dal momento che il modello prototipo è essenzialmente solo la clonazione di oggetti, ad un certo punto l'oggetto originale deve essere creato da solo (cioè non clonato). Quindi questo significherebbe che avrei bisogno di avere una copia esistente di ogni oggetto che vorrei mai clonare già pronto per la clonazione? Sembra stupido per me.

Qualcuno può spiegare qual è l'uso di questo modello?

Post originale: link

    
posta user1905391 15.12.2012 - 00:51
fonte

3 risposte

4

L'allocazione della memoria potrebbe non essere la parte lenta della creazione dell'oggetto. Se l'oggetto è guidato dai dati o altrimenti il risultato di un calcolo, è talvolta prudente memorizzare nella cache il risultato in modo che tale risultato possa essere clonato anziché rifatto. Quindi, il modello Prototype.

    
risposta data 15.12.2012 - 02:03
fonte
1

Questo modello può essere usato quando la creazione dell'oggetto è costosa. Ad esempio, si consideri una classe che richiede i dati di configurazione da un file / database / su una rete per l'inizializzazione. Questo tipo di operazioni rende la creazione di oggetti molto costosa, specialmente se si desidera creare più oggetti di questo tipo.

Dai un'occhiata al link

    
risposta data 31.03.2017 - 11:28
fonte
0

Ci sono molti usi per Prototype, piccoli e grandi ... JavaScript e Io sono entrambi lingue basati su prototipi, per esempio. In un certo senso è l'ereditarietà basata su oggetti (rispetto alla classe), che è un concetto piuttosto interessante, IMO.

Dal punto di vista del modello di progettazione di dadi e bulloni, Prototype funziona bene se si dispone di un caso specifico in cui il "costo" di creazione di un oggetto è elevato, non consiste solo di allocazione di memoria e occorrono più di un'istanza di tale oggetto ... più alto è il numero più utile è il modello.

A causa della sua utilità generale per risolvere questo caso specifico, Prototype si combina bene con altri modelli di progettazione; è frequentemente elencato come complementare ad altri modelli nel libro GoF.

Tangente

Puoi anche fare piccoli trucchi divertenti con Prototype. Ad esempio, ricordo un programma di utilità per la creazione di codice basato su frammenti personalizzati che ho scritto un certo numero di anni fa con un prototipo CodeScripter che conteneva alcune specifiche istanze come il percorso di destinazione, il nome file, alcune opzioni di metadati e un meccanismo per specificare quali frammenti usare quale ordine ... ha tirato fuori una serie di modelli diversi dai file sul disco alla creazione, e quindi scenari di output specifici avrebbero clonato il CodeScripter evitando così il costo di inizializzazione, inserendo le informazioni appropriate per l'istanza e configurando la selezione appropriata di snippet ordinati.

Ovviamente, avrei potuto risolvere il problema in molti modi, ma sebbene avesse il suo lato negativo * il volume di output che dovevano essere generati e il fatto che la maggior parte degli scenari fossero molto simili e ci fosse un'alta sovrapposizione nei frammenti ha reso Prototype un'opzione ordinata.


 * Il lato negativo era che il prototipo CodeScripter era sfacciatamente un oggetto divino ... ma nel caso di quell'utilità ho trovato che fosse un compromesso accettabile.

    
risposta data 15.12.2012 - 03:08
fonte

Leggi altre domande sui tag