JavaRush /Java Blog /Random-IT /Modello Singleton con parole tue
Roman_kh
Livello 33
Харьков

Modello Singleton con parole tue

Pubblicato nel gruppo Random-IT

Ciao a tutti, JavaRush!

Oggi vi parlerò del design pattern Singleton(singolo). Modello Singleton con parole tue - 1Obiettivo: creare una classe che avrà un solo oggetto. Ciò significa che non importa quante volte si accederà, verrà restituito lo stesso oggetto creato la prima volta. Questa è una cosa comoda e necessaria in molti luoghi, non per niente viene implementata nei framework. Applicazione:
  • Ad esempio, è necessario connettere un database a un progetto e una classe che sarà responsabile della connessione ad esso. La connessione viene creata una volta e non è necessario crearla ancora e ancora
  • Application settings— una classe responsabile delle impostazioni di connessione necessarie per l'applicazione: host e porta del database, ecc. Vengono creati una volta e utilizzati durante il funzionamento dell'applicazione.
  • Ci sono molti altri esempi che non ho menzionato, quindi scrivi le tue opzioni nei commenti! =)
Dopo questa introduzione, a quanto ho capito, possiamo mostrare un esempio di questa classe: (Anche se sono sicuro che ognuno di noi può inventarne un'implementazione) Ecco l'esempio più semplice, quando rendiamo privato il costruttore, cioè Non è possibile creare un oggetto in modo esplicito. Ed esiste un metodo statico getInstance()che fornisce un oggetto.
public class Singleton {
  private static Singleton instance;
  private Singleton () {}

  public static Singleton getInstance() {
    if (instance == null) {
      instance = new Singleton();
    }
    return instance;
  }
}
Ci sono problemi con il multithreading e quindi puoi inserire un metodo getInstance()marker synchronized:
public class Singleton {
  private static Singleton instance;
  private Singleton () {}

  public static synchronized Singleton getInstance() {
    if (instance == null) {
      instance = new Singleton();
    }
    return instance;
  }
}
Alla fine, come al solito, voglio dirti che se la pensi diversamente o trovi un errore in me, scrivilo nei commenti! Discuteremo di tutto con piacere :) Se ti è piaciuto l'articolo, scrivi "+" e lo saprò. Questo è importante per me :) PS Sto aggiungendo altre implementazioni: secondo Joshua Bloch , questo è il modo migliore per implementare il modelloEnum Singleton
public enum Singleton {
   INSTANCE;
}
Double Checked Locking & volatile
public class Singleton {
        private static volatile Singleton instance;

        public static Singleton getInstance() {
      Singleton localInstance = instance;
      if (localInstance == null) {
         synchronized (Singleton.class) {
            localInstance = instance;
            if (localInstance == null) {
               instance = localInstance = new Singleton();
            }
         }
      }
      return localInstance;
   }
}
E inoltre On Demand Holder idiom:
public class Singleton {

   public static class SingletonHolder {
      public static final Singleton HOLDER_INSTANCE = new Singleton();
   }

   public static Singleton getInstance() {
      return SingletonHolder.HOLDER_INSTANCE;
   }
}
+Inizializzazione lenta +Prestazioni elevate -Non può essere utilizzato per campi di classe non statici Per eventuali domande/suggerimenti: scrivere nei commenti! Vedi anche gli altri miei articoli:
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION