JavaRush /Java-Blog /Random-DE /Singleton-Muster in Ihren eigenen Worten
Roman_kh
Level 33
Харьков

Singleton-Muster in Ihren eigenen Worten

Veröffentlicht in der Gruppe Random-DE

Hallo zusammen, javaRush!

Heute erzähle ich Ihnen etwas über das Designmuster Singleton(einzeln). Singleton-Muster in Ihren eigenen Worten – 1Ziel: Erstellen Sie eine Klasse, die nur EIN Objekt hat. Dies bedeutet, dass unabhängig von der Häufigkeit des Zugriffs dasselbe Objekt zurückgegeben wird, das beim ersten Mal erstellt wurde. Das ist eine praktische Sache und vielerorts notwendig, nicht umsonst wird es in Frameworks implementiert. Anwendung:
  • Beispielsweise müssen Sie eine Datenbank mit einem Projekt und einer Klasse verbinden, die für die Verbindung damit verantwortlich ist. Die Verbindung wird einmal hergestellt und muss nicht immer wieder hergestellt werden
  • Application settings– eine Klasse, die für die Verbindungseinstellungen verantwortlich ist, die für die Anwendung benötigt werden: Datenbankhost und -port usw. Sie werden einmal erstellt und während des gesamten Betriebs der Anwendung verwendet.
  • Es gibt noch viele weitere Beispiele, die ich nicht erwähnt habe, also schreiben Sie Ihre Optionen in die Kommentare! =)
Nach dieser Einführung können wir, so wie ich es verstehe, ein Beispiel dieser Klasse zeigen: (Obwohl ich sicher bin, dass jeder von uns eine Implementierung davon finden kann) Hier ist das einfachste Beispiel, wenn wir den Konstruktor privat machen, d. h. Sie können ein Objekt nicht explizit erstellen. Und es gibt eine statische Methode getInstance(), die ein Objekt bereitstellt.
public class Singleton {
  private static Singleton instance;
  private Singleton () {}

  public static Singleton getInstance() {
    if (instance == null) {
      instance = new Singleton();
    }
    return instance;
  }
}
Es gibt Probleme mit Multithreading und dann können Sie eine getInstance()Markierungsmethode einfügen synchronized:
public class Singleton {
  private static Singleton instance;
  private Singleton () {}

  public static synchronized Singleton getInstance() {
    if (instance == null) {
      instance = new Singleton();
    }
    return instance;
  }
}
Abschließend möchte ich wie immer sagen: Wenn Sie anders denken oder einen Fehler in mir finden, schreiben Sie es in die Kommentare! Wir werden alles gerne besprechen :) Wenn Ihnen der Artikel gefallen hat, schreiben Sie „+“ und ich werde es wissen. Das ist mir wichtig :) PS: Ich füge weitere Implementierungen hinzu: Laut Joshua Bloch ist dies der beste Weg, die Vorlage zu implementierenEnum 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;
   }
}
Und weiter 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;
   }
}
+Verzögerte Initialisierung +Hohe Leistung -Kann nicht für nicht statische Klassenfelder verwendet werden. Fragen/Anregungen – schreiben Sie in die Kommentare! Siehe auch meine anderen Artikel:
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION