Das Singleton-Muster ist eines der einfacheren Designmuster. Eine Klasse, die das Singleton-Entwurfsmuster verwendet, hat eine einzelne Instanz, die sie selbst verwaltet. Diese Klasse verhindert, dass andere Klassen eine Instanz davon erstellen.

Eine Singleton-Klasse bietet auch einen einzelnen globalen Zugriffspunkt auf die von ihr erstellte Instanz. Jede Klasse, die eine Instanz einer Singleton-Klasse haben möchte, muss also über ihren einzigen Zugriffspunkt darauf zugreifen.

Die hervorragende Unterstützung von Java für objektorientierte Programmierung macht es einfach, das Singleton-Entwurfsmuster zu verwenden.

Implementieren des Singleton-Musters mit Java

Es gibt viele Möglichkeiten, das Singleton-Muster in Java zu implementieren. Die eifrigen und faulen Ansätze sind übliche Variationen. Jeder dieser Ansätze hat seine eigenen Vorzüge und Nachteile. Daher sollte die von Ihnen gewählte Methode davon abhängen, wie Ihre Anwendung funktionieren wird.

Der eifrige Ansatz

Das Implementieren des Singleton-Musters mit dem Eifer-Ansatz bedeutet, dass die Klasse beim Laden eine neue Instanz von sich selbst erstellt.

instagram viewer

öffentlichKlasseEifrigSingleton{
Privatgeländestatisch EagerSingleton-Instanz = neu EifrigSingleton();

PrivatgeländeEifrigSingleton(){}

öffentlichstatisch EifrigSingleton bekomme Instanz(){
zurückkehren Beispiel;
}
}

Der EifrigSingletonJava-Klasse erstellt beim Laden eine neue Instanz von sich selbst. Es weist diese Instanz der privaten Statik zu Instanzvariable, auf die nur innerhalb der Singleton-Klasse zugegriffen werden kann. Der einzige externe Zugriffspunkt auf die Instanzvariable ist über die bekomme Instanz() Methode. Diese Methode gibt die zuvor erstellte Instanz der Klasse zurück.

Dieser Ansatz ist großartig, da er verhindert, dass Multithreading Problem, das eine der größten Herausforderungen des Singleton-Musters darstellt. Es löst das Multithreading-Problem, indem es eine neue Instanz von sich selbst erstellt, bevor ein neuer Thread auf seine Instanzvariable zugreifen kann. Dadurch wird sichergestellt, dass jeder Thread nur Zugriff auf dieselbe Instanz hat.

Der eifrige Ansatz ist jedoch nur praktisch, wenn Ihre Anwendung eine Instanz der Singleton-Klasse verwendet, wenn sie gestartet wird. Andernfalls erstellen Sie ein Objekt, bevor Ihre Anwendung es benötigt, und verbrauchen unnötig Ressourcen.

Der faule Ansatz

Der faule Ansatz ist die Lösung für das Problem des eifrigen Ansatzes. Sie können damit nur dann eine neue Instanz einer Singleton-Klasse erstellen, wenn Ihr Programm dies benötigt.

öffentlichKlasseLazySingleton{
Privatgeländeflüchtigstatisch LazySingleton-Instanz;

PrivatgeländeLazySingleton(){}

öffentlichstatisch LazySingleton bekomme Instanz(){
Wenn (Instanz == Null) {
synchronisiert (LazySingleton.Klasse) {
Wenn (Instanz == Null) {
Instanz = neu LazySingleton();
}
}
}

zurückkehren Beispiel;
}
}

Der Lazy-Ansatz löst das Multithreading-Problem mit der synchronisiert Stichwort. Dadurch wird verhindert, dass zwei Threads gleichzeitig auf die Instanzvariable zugreifen. Die Synchronisierung ist jedoch teuer, sodass die Anwendung sie nur einmal verwendet, wenn sie zum ersten Mal getInstance() aufruft.

Wann das Singleton-Muster verwendet werden sollte

Das Singleton-Muster ist in vielen Szenarien nützlich, um Dialogfelder zu erstellen, Registrierungseinstellungen zu handhaben oder Thread-Pools zu verwalten.

Eine weitere häufige Verwendung für das Singleton-Muster besteht darin, eine zentrale Klasse zu erstellen, die Datenbankverbindungen verwaltet.