Sottoclasse di una classe Singleton

0

Quando è necessario sottoclasse una classe Singleton o, in altre parole, è buona sottoclasse di un Singleton?

Se generalmente consentito quali sarebbero i pro e i contro e come gestire o ottenere un'istanza dalla sottoclasse?

Sarebbe bello poter fornire alcuni frammenti di esempio in java. Non spezza il principio di responsabilità singola e rende l'app meno controllabile e porta a uno stato complicato?

    
posta Sazzad Hissain Khan 06.06.2018 - 19:56
fonte

1 risposta

4

Ci sono pochissimi motivi per sottoclasse un singleton. L'unica ragione potenzialmente accettabile che riesco a pensare è se hai implementazioni specifiche per piattaforma. L'importante è che non aggiungiate nuovi singleton per la stessa cosa. Il modo in cui funzionerebbe è come questo:

public class MySingleton {
    private static MySingleton _instance;

    static {
        // Detect platform
        switch(platform) {
            case Win32:
                _intance = new Win32Singleton();
                break;
            case Ubuntu:
                _instance = new UbuntuSingleton();
                break;
            default:
                _instance = new MySingleton();
                break;
        }
    }

    public static MySingleton getInstance() { return _instance; }

    protected MySingleton() {}
}

Essenzialmente, il tuo inizializzatore è una fabbrica per istanziare l'istanza appropriata del singleton, ma le seguenti cose devono rimanere vere:

  • Solo un posto per accedere al tuo singleton (la classe root)
  • I tuoi costruttori sono protetti o accessibili dal pacchetto

Tuttavia

Nei casi in cui sai che avrai implementazioni specifiche per piattaforme è solo più onesto lavorare con una fabbrica per ottenere un'istanza di lavoro per ciò di cui hai bisogno e non preoccuparti dell'intera faccenda di Singleton. I single sono (ancora) abusati anche quando non ci sono reali ragioni per guidarli.

Ogni volta che si progetta un singleton da sottoclasse, si introduce molta complessità che non esisterebbe se solo si concedessero più istanze.

    
risposta data 06.06.2018 - 20:11
fonte

Leggi altre domande sui tag