2024-07-11
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Wenn eine Anwendung die Ressourcenfreigabe steuern, Konfigurationsverwaltung durchführen und Aufzeichnungsvorgänge protokollieren muss, besteht eine häufige Anforderung darin, einen globalen Zugriffspunkt zu verwenden, damit das Programm über diesen globalen Zugriffspunkt darauf zugreifen kann, unabhängig davon, wo es sich befindet relevante Instanzinformationen. Um diesen Bedarf zu decken, können wir das Singleton-Muster verwenden. Das Singleton-Muster stellt sicher, dass eine Klasse nur eine Instanz hat und stellt einen globalen Zugriffspunkt für den Zugriff auf diese Instanz bereit.
Insbesondere stellt das Singleton-Muster normalerweise eine statische Methode (z. B. getInstance()) bereit, die die einzige Instanz der Klasse zurückgibt. Da diese Methode statisch ist, kann sie aufgerufen werden, ohne eine Instanz der Klasse zu erstellen. Dies bedeutet, dass jeder Code, der Zugriff auf die Klasse hat, durch Aufrufen dieser statischen Methode eine Singleton-Instanz erhalten kann.
In diesem Artikel werden die grundlegenden Konzepte und Implementierungsschritte des Singleton-Musters ausführlich vorgestellt. Durch diesen Artikel werden Sie in der Lage sein, die Funktionsweise des Singleton-Musters zu verstehen und zu erfahren, wie Sie es effektiv in realen Projekten einsetzen können.
Um ein interessantes Beispiel zu nennen: Das Singleton-Modell ist wie der Heiligenschein des Protagonisten in einer Anime-Welt. Egal wie sich die Handlung entwickelt, es gibt immer nur einen Protagonisten, und jeder weiß, dass er der Kern der Geschichte ist. Auf diese Weise kann jeder die gleiche Person finden, die die Handlung vorantreibt, ganz gleich, wie sich die Geschichte entwickelt.
Vorteil
Stellen Sie sicher, dass es sich um eine einzelne Instanz handelt: Vermeiden Sie die doppelte Erstellung von Instanzen und sparen Sie Ressourcen.
globaler Zugangspunkt: Bequemer globaler Zugriff und vereinfachtes Telefonieren.
Verzögerte Initialisierung: Erstellen Sie Instanzen nach Bedarf, um die Leistung zu verbessern.
Mangel
Schwierig zu skalieren: Singleton-Klassen sind oft schwierig zu erweitern, da der Konstruktor privat ist.
potenzielle Leistungsprobleme: In einer Umgebung mit hoher Parallelität können bei einigen Implementierungen Leistungsprobleme auftreten.
Schwierigkeiten beim Testen: Das Singleton-Muster kann das Testen erschweren, da es sich um einen globalen Status handelt.
Entsprechend den Merkmalen des Singleton-Musters können seine Verwendungsszenarien in die folgenden Kategorien unterteilt werden:
Die Implementierung des Singleton-Musters umfasst normalerweise drei Elemente:
- privater KonstrukteurMachen Sie den Konstruktor der Klasse privat, sodass die Außenseite über das Schlüsselwort new keine Instanz erstellen kann.
- Private statische Referenzpunkte auf die eigene Instanz, erstellen Sie eine statische Instanzvariable innerhalb der Klasse, um die eindeutige Instanz zu speichern.
- Öffentliche statische Methoden, die ihre eigene Instanz zurückgebenStellen Sie eine statische Methode bereit, damit die Außenwelt die einzige Instanz über diese Methode erhalten kann.
Für den Singleton-Modus im Hungry-Stil wird die Singleton-Instanz beim Laden der Klasse erstellt. Dies ist threadsicher, da beim Laden der Klasse ein statisches Objekt erstellt wurde und die Reaktionsgeschwindigkeit beim Aufruf schnell ist. Der Nachteil liegt ebenfalls auf der Hand. Solange andere statische Methoden der Klasse ausgeführt werden oder die Klasse geladen wird, wird diese Instanz trotzdem initialisiert.
/**
* 饿汉单例模式:在还没有实例化的时候就初始化
*/
public class Hungry {
//1. 开始时就创建实例
private static final Hungry instance=new Hungry();
// 2. 私有化的构造方法
private void hungry() {
}
public static Hungry getInstance() {
// 返回单例名
return instance;
}
}