Singleton

Das Singleton-Pattern gewährleistet, dass von einer Klasse nur genau eine Instanz existiert.

Es stellt einen globalen Zugriffspunkt auf diese einzige Instanz bereit.

I. Allgemeines Pattern (GoF)


Important

Singleton-Eigenschaften:

  • Nur eine Instanz der Klasse
  • Globaler Zugriffspunkt
  • Lazy Initialization (auf Anfrage erstellen)
  • Thread-Safety beachten
Example

public class DatabaseConnection {
   private static DatabaseConnection instance;
   
   // Private Konstruktor verhindert direkte Instanziierung
   private DatabaseConnection() {}
   
   // Thread-safe Singleton
   public static synchronized DatabaseConnection getInstance() {
       if (instance == null) {
           instance = new DatabaseConnection();
       }
       return instance;
   }
}

// Verwendung
DatabaseConnection db = DatabaseConnection.getInstance();

Warning

Kann zu tight coupling führen und Testing erschweren.

II. Jakarta-EE-Annotation @Singleton (EJB)


@Singleton markiert eine EJB als globale Einzelinstanz.

Genau eine Instanz für die ganze App.

Eigenschaften

Beispiel

@Singleton
public class CounterBean {
    private final AtomicInteger count = new AtomicInteger(0);

    public int incrementAndGet() {
        return count.incrementAndGet();  // thread-safe!
    }
}
Warning

Normales int count++ führt bei mehreren Threads zu Datensalat. Nutze AtomicInteger oder synchronized.

III. .NET-Pendant


AddSingleton.