2013-05-24 17 views
8

Ho una certa confusione tra i due.Qual è la differenza tra il modello di progettazione Singleton e Registry

Singleton
Controllare se l'istanza esiste restituirlo, o crearne uno nuovo.

Registro
Controllare se l'istanza esiste restituirlo, o crearne uno nuovo e conservarlo.

Quale differenza tra loro?

+1

Il Registro implementa il modello Singleton. –

+0

@JohnConde no, non è così. O a Leas non è necessario. –

+0

Per quanto ho capito, un registro non consente la creazione di istanze. Lo scopo è che la conoscenza di come le cose dovrebbero essere create può essere altrove, lontano dalla maggior parte dei client del registro. Ciò che si confronta con sembra essere una combinazione di una fabbrica e un registro, in gran parte sconfiggendo lo scopo di un registro. – Stein

risposta

8

Entrambi riguardano il controllo dell'istanza. La differenza è che Singleton consente solo un'istanza di una determinata classe mentre Registro detiene una mappa 1-1 di chiavi per le istanze. In genere, la chiave è (o rappresenta) una classe e il valore è un'istanza di quella classe.

Ad esempio, il framework Code Igniter contiene un registro con un'istanza di ogni libreria/modello/controller/helper che carica e restituisce ogni volta le stesse istanze.

1

Un registro differisce dal fatto che il suo scopo principale è quello di consentire all'utente di navigare agli oggetti associati. Vedi Martin Fowler.

1

Definizione registro: quando si desidera trovare un oggetto, in genere si inizia con un altro oggetto che ha un'associazione con esso e si utilizza l'associazione per spostarsi ad esso. Pertanto, se si desidera trovare tutti gli ordini per un cliente, si inizia con l'oggetto cliente e si utilizza un metodo per ottenere gli ordini. Tuttavia, in alcuni casi non avrai un oggetto appropriato per iniziare. Potresti conoscere il numero ID del cliente ma non avere un riferimento. In questo caso hai bisogno di una sorta di metodo di ricerca - un cercatore - ma la domanda rimane: come si arriva al finder?

Un registro è essenzialmente un oggetto globale, o almeno sembra uno, anche se non è globale come lo è appear.

Definizione Singleton: a volte è importante avere solo un'istanza per una classe. Ad esempio, in un sistema dovrebbe esserci un solo gestore di finestre (o solo un file system o solo uno spooler di stampa). Solitamente i singleton vengono utilizzati per la gestione centralizzata delle risorse interne o esterne e forniscono un punto di accesso globale a themselves.

Sulla base di queste definizioni il loro utilizzo è completamente diverso.

0

La differenza principale tra registro e singleton è che Singleton ci consente di creare una singola istanza di una classe alla volta, mentre il registro ci consente di creare più istanze della stessa classe.

+0

non molto nuovo rispetto alla risposta accettata, è lì ;-) – kleopatra

Problemi correlati