dovrebbe essere disponibile a tempo indeterminato o dovrebbe essere distruttibile?

0

Il singleton deve essere progettato in modo che possa essere creato e distrutto in qualsiasi momento nel programma o dovrebbe essere creato in modo che sia disponibile nella vita del programma. Qual è la migliore pratica? Quali sono i vantaggi e gli svantaggi di entrambi?
EDIT: - Come per il collegamento condiviso da Mat, il singleton dovrebbe essere statico. Ma quali sono gli svantaggi nel renderlo distruttibile? Un vantaggio è che la memoria può essere salvata quando non è utile.

    
posta Manoj R 07.12.2012 - 07:02
fonte

5 risposte

3

Qualunque cosa faccia galleggiare la tua barca.

Se hai bisogno di distruggerlo (forse per recuperare la memoria o forse lo stato non è più valido) dovresti farlo.

Se contiene uno stato che è scomodo da ricreare su richiesta, dovresti tenerlo in giro.

Se non hai motivi particolari per distruggerlo, penso che dovresti tenerlo in giro.

    
risposta data 07.12.2012 - 21:23
fonte
1

Singleton presenta la stessa dipendenza di una variabile globale. Singleton tende a introdurre implementazioni difficili da testare.

Detto questo, preferisco un progetto singleton implementato come oggetto standard. La singolarità dell'oggetto è un dettaglio di implementazione in cui viene creata e resa disponibile una sola istanza.

L'istanza singleton è spesso utile quando è pigramente costruita. Questo è solo costruire l'oggetto quando è necessario.

L'istanziazione lenta dell'oggetto può essere spesso utilizzata per aiutare con la testabilità di oggetti che dipendono dal singleton. A scopo di test, è possibile introdurre un oggetto fittizio o un'implementazione alternativa che viene istanziata.

Singleton ha un posto nella tua cassetta degli attrezzi. Comprendere i loro limiti è importante per utilizzarli con successo.

    
risposta data 07.12.2012 - 18:26
fonte
1

I singleton sono soluzioni completamente appropriate per alcuni problemi di progettazione. Tuttavia, come viene implementato il singleton qui.

Come esempio in C #,

public class MySingleton
{
    static MySingleton()
    {
        Instance = new MySingleton();
    }

    protected MySingleton()
    {
    }

    public MySingleton Instance
    {
        get;
        protected set;
    }

    //  Put public instance members and properties here.
}

Sarebbe un esempio di un singleton che non dovrebbe mai essere distrutto. È possibile avere un campo statico interno per memorizzare il riferimento al singleton e fare un'istanza lazy se il valore interno è null. Ma devi preoccuparti di garantire l'accesso singlet per testare null, potenzialmente creare e quindi ottenere l'istanza singleton, solo così potresti liberare la memoria da questo oggetto ad un certo punto.

È davvero una cattiva pratica creare singoletti dichiarando statica la classe. Rende impossibile la distruzione dell'oggetto, oltre a renderlo un incubo per deridere l'interfaccia nei test di unità.

    
risposta data 08.12.2012 - 04:32
fonte
0

Un singleton non dovrebbe mai essere disponibile, è la definizione di anti-pattern.

Detto questo, il presunto vantaggio del design è che gestisce l'ordine di creazione e la durata in modo tale da garantire che la cosa esista sempre. Rendendolo distruttibile sconfigge piuttosto lo scopo.

    
risposta data 07.12.2012 - 15:11
fonte
0

La migliore pratica è semplicemente non usare un Singleton in primo luogo. Ma se ne userai uno, renderlo distruttibile è ancora peggio , ed è piuttosto straordinario avere qualcosa di peggio di un Singleton normale.

    
risposta data 07.12.2012 - 15:45
fonte

Leggi altre domande sui tag