April 14 2010

Singletons in Java mit dem Holder-Pattern

2  kommentare

Das Singleton-Pattern ist eines der bekanntesten Entwurfsmuster. Es wird verwendet, wenn nur eine Instanz einer Klasse existieren darf. Ein klassisches Anwendungsbeispiel ist das Schreiben von Logfiles in eine zentrale Datei. Auf Wikipedia kann man Haufenweise Nachteile des Singleton-Patterns nachlesen. Aller Kritik zum Trotz hat dieses Pattern für bestimmte Anwendungsfälle seine Berechtigung. Ein Singleton in Java sollte mit dem Holderpattern implementiert werden. Es initalisiert den Singleton so spät wie möglich, nämlich bei der ersten Verwendung. Die Initalisierungsphase einer Klasse ist durch die Java Language Specification (Kapitel 12.4) garantiert nicht nebenläufig. Weil die statische Variable INSTANCE in einer seriellen Operation geschrieben wird ist keine Synchronisation von getInstance() mehr notwendig ist. Damit ist der Singleton implizit Threadsafe. Das Pattern wurde von William Pugh im Rahmen seiner arbeiten zum Java Memory Model entwickelt. Eine gute Erklärung ist in der englischen Wikipedia unter dem "offiziellen" Namen initialization on demand holder idiom zu finden.
public class Singleton
{
    /**
     * Privater Konstruktor verhindert externe Instanzierung
     */
    private Singleton()
    {
    }

    /**
     * Innere statische Holder-Klasse
     */
    private static class Holder
    {
        private static final Singleton INSTANCE = new Singleton();

            private Holder()
            {
            }
    }

    /**
     * Statische Factory-Methode
     */
    public static Singleton getInstance()
    {
        return Holder.INSTANCE;
    }
}
Danke an André Janus für die hilfreichen Kommentare.

Veröffentlicht in Softwareentwicklung am 14. April 2010

Über Jens Jäger.

Meine Mission ist es, den Unternehmens-Impact, meiner Kunden durch agile Softwareprojekte zu steigern:

  • Digitale Transformation ankurbeln.
  • Routineaufgaben automatisieren.
  • Freiraum für Innovation schaffen.

Das könnte dich auch interessieren

Learnings vom Java Forum Stuttgart 2023

Wie letztes Jahr waren wir wieder beim Java Forum Stuttgart. Diesmal war die JSE  mit fünf Mitarbeitern auf der Konferenz vertreten.Das waren unsere wichtigsten Erkenntnisse:Allgemein:Das Java Forum Stuttgart ist jedes mal wieder ein grandioses Community Event. Man kann der Java User Group Stuttgart nur ein absolutes Lob für die mega Organisation aussprechen. Respekt das ein gemeinnütziger

Read More

Learnings vom Java Forum Stuttgart 2022

Das Java Forum Stuttgart hat schon zum 25ten mal stattgefunden und war ein super Event! Folgende Erkenntnisse haben wir von der Konferenz mitgenommen:Softwarearchitektur:Erst Qualitätsanforderungen definieren, dann die Architekturentscheidungen treffen.Conference Driven Development vermeiden (wenn man was cooles auf einer Konferenz gesehen hat und dann sofort in seine Projekte einbaut)Dokumentation als Code: z.B. mit Doctoolchain. Damit kann

Read More

Meine Learnings von der der Contra 2022

Nachdem die letzten beiden Jahre die meisten großen Veranstaltungen ausgefallen sind. War ich zwei Tage in Düsseldorf auf der Contra. Der Konferenz für Conversion und Traffic. Vor zwei Jahren habe ich mir die Vorträge von der Contra im Stream angeschaut. Dazu habe ich einen ausführlichen Blogpost geschrieben: Online-Marketing Trends 2020. Nachdem seit einiger Zeit wieder

Read More

Du möchtest mit mir zusammenarbeiten? 

Werde ein Teil unseres Teams: