2010-09-27 19 views
6

Please help me per capire il modello Factory e il pattern Singleton, quando abbiamo bisogno di usare il pattern Factory e quando usare il pattern Singleton.In quale scenario usiamo il modello di fabbrica e in quale modello Singleton?

Qual è il principale vantaggio/svantaggio di uno rispetto all'altro?

Qualsiasi suggerimento (spiegazione) mi aiuterà molto.

+0

@Close Persona supportata: perché questa domanda non è reale? – Vijjendra

+1

Anche se può essere leggermente fuori portata e un po 'complesso e mistificante, vale ancora la pena ricordare che l'utilizzo di un framework DI/IoC può imitare entrambi i comportamenti creando istanze di oggetti con Singleton o Spit fuori come una fabbrica. In questo modo è possibile mantenere un'elevata testabilità poiché si disaccoppia dalle chiamate statiche singole. Solo il mio 2c – Aren

+0

@Aren, purtroppo non penso che il tuo commento aiuterà molto l'OP, come hai previsto. –

risposta

2

Fanno due cose molto diverse.

Esiste una fabbrica per creare una o più copie di una classe. Esso, o un metodo che espone, può essere fornito ad un'altra classe che ha bisogno della dipendenza, e la classe dipendente può chiamare il metodo factory per ottenere un'istanza.

Un singleton esiste per creare una sola copia di una classe. Un riferimento alla classe viene ottenuto staticamente, ma tale riferimento può essere passato come un'istanza, a differenza di una classe puramente statica.

+0

quando si utilizza il modello Singleton, viene creata solo un'istanza della classe, quell'istanza è comune a tutti gli utenti O ogni utente ha una propria istanza? – Vijjendra

+0

@Vijjendra - "comune per tutti gli utenti" OPPURE "ogni utente ha una propria istanza" dipende dal fatto che il codice di esecuzione si trovi nello stesso processo o meno. Non ha nulla a che fare con "utenti". Se il tuo processo è un'applicazione web, un'istanza singleton può essere l'unica istanza per tutte le richieste, ma se il tuo server web avvia un altro processo worker/task, potrebbe esserci un'altra istanza singleton nello spazio di memoria per quel processo. –

+0

@Mike: Grazie, mike spiega la seconda parte (web server) dello scenario. – Vijjendra

3

Non sono molto simili e quindi non hanno vantaggi l'uno rispetto all'altro. Se siete confusi, leggere prima:

Utilizzare il pattern Singleton quando si desidera consentire solo un'istanza di una classe di oggetti da un'istanza.

Utilizzare lo schema predefinito quando è necessario astrarre i dettagli dell'istanza della classe dell'oggetto.

Problemi correlati