Domanda

Non perdere tempo con questa domanda.Segui fino a: Cosa c'è di così brutto nei single?


Per favore, sentitevi liberi di lamentarvi Singleton.

Utilizzo inappropriato di Singleton potrebbe causare molta vernice.Che tipo di problema hai riscontrato con Singleton?Qual è l'uso improprio comune di questo modello?


Dopo aver approfondito la risposta di Corey, ho scoperto alcuni ottimi articoli su questo argomento.

È stato utile?

Soluzione

Altri suggerimenti

A volte può rendere il tuo codice più strettamente associato alla classe singleton che viene rinnovata direttamente per nome da diverse parti della tua base di codice.Quindi, ad esempio, quando devi testare una parte del tuo codice e fa riferimento a un singleton da una parte diversa del codice, non puoi facilmente simulare quella dipendenza con un oggetto fittizio.

Non c'è niente di intrinsecamente sbagliato nel modello Singleton.È uno strumento e talvolta dovrebbe essere utilizzato.

Non sono stato esposto al Singleton tanto quanto alcuni degli altri poster, ma quasi tutte le implementazioni che ho visto (in C#) avrebbero potuto essere ottenute con classi/metodi statici.Suppongo che potresti sostenere che una classe statica è un'implementazione del modello singleton, ma non è quello che ho visto.Ho visto persone creare e gestire queste classi/oggetti Singleton quando tutto ciò di cui avevano veramente bisogno era usare la parola chiave statica.

Quindi, non direi che il modello Singleton sia negativo.Direi che è un po' come le pistole.Non penso che le armi siano dannose, ma sicuramente possono essere usate in modo inappropriato.

Penso che una domanda più appropriata potrebbe essere:In quali situazioni l'uso di un modello SIngleton è inappropriato?O cosa hai visto che utilizza un Singleton che non dovrebbe.

Fondamentalmente il singleton è un modo per avere dati statici e far finta che non siano realmente statici.

Naturalmente lo uso, ma cerco di non abusarne.

Un problema fondamentale con il design originale di GoF è il fatto che il distruttore non è protetto.Chiunque abbia un riferimento all'istanza singleton è libero di distruggere il singleton.

Vedi l'aggiornamento di John Vlissides "To Kill A Singleton" nel suo libro "Pattern Hatching" (Collegamento ad Amazon).

saluti,

rapinare

Non c'è niente di sbagliato in un singleton in sé, e come modello ricopre un ruolo vitale nel riconoscere la necessità che determinati oggetti vengano creati solo una volta.

Ciò per cui viene spesso utilizzato è un eufemismo per le variabili globali nel tentativo di aggirare lo stigma delle variabili globali, ed è questo uso che è intrinsecamente sbagliato.Se una variabile globale risulta essere la soluzione corretta, l'utilizzo di un singleton non la migliorerà.Se è (come è abbastanza comune) errato utilizzare una variabile globale, racchiuderla in un singleton non lo renderà più corretto.

La maggior parte dei modelli singleton che vedo scritti non sono scritti in modo thread-safe.Se scritti correttamente possono essere utili.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top