Skip to content

Commit 12fd4e0

Browse files
authored
docs: Translate Singleton into German
#2295
1 parent 8bdd431 commit 12fd4e0

1 file changed

Lines changed: 114 additions & 0 deletions

File tree

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
---
2+
shortTitle: Singleton
3+
category: Creational
4+
language: de
5+
tag:
6+
- Gang of Four
7+
- Instantiation
8+
- Lazy initialization
9+
- Resource management
10+
---
11+
12+
## Alternativbezeichnung
13+
14+
* Single Instance
15+
16+
## Zweck
17+
18+
Sicherstellen, dass es nur eine Instanz einer Klasse gibt, und einen globalen Zugriffspunkt auf diese Instanz bereitstellen.
19+
20+
## Detaillierte Erklärung
21+
22+
Analogie aus der Realität
23+
24+
> Das Singleton-Pattern entspricht der Ausgabe von Pässen durch die Regierung.
25+
> Jeder Bürger darf zu jeder Zeit nur einen Pass besitzen. Die Meldebehörde stellt sicher,
26+
> dass niemandem ein zweiter Pass ausgestellt wird.
27+
> Wenn ein Bürger ins Ausland reist, benötigt er seinen Pass, der als einzigartiger weltweit anerkannter Nachweis
28+
> seiner Identität dient.
29+
30+
In einfachen Worten
31+
32+
> Es darf nur ein einziges Objekt dieser Klasse erzeugt werden.
33+
>
34+
Wikipedia sagt
35+
36+
> In der Softwareentwicklung ist das Singleton ein Entwurfsmuster, das die Instanziierung einer
37+
> Klasse auf ein einziges Objekt beschränkt.
38+
> Dies ist sinnvoll, wenn genau ein Objekt benötigt wird, das Aktionen über das gesamte System
39+
> hinweg koordiniert.
40+
41+
Ablaufdiagramm
42+
43+
![Singleton Pattern sequence diagram](./etc/singleton-sequence-diagram.png)
44+
45+
## Programmbeispiel
46+
47+
vgl. Joshua Bloch, Effective Java 2nd Edition, Seite 18
48+
49+
> Die beste Art der Implementation eines Singletons ist ein Enum mit nur einem Element.
50+
51+
```java
52+
public enum EnumIvoryTower {
53+
INSTANCE
54+
}
55+
```
56+
57+
So wird es verwendet:
58+
59+
```java
60+
var enumIvoryTower1 = EnumIvoryTower.INSTANCE;
61+
var enumIvoryTower2 = EnumIvoryTower.INSTANCE;
62+
LOGGER.info("enumIvoryTower1={}", enumIvoryTower1);
63+
LOGGER.info("enumIvoryTower2={}", enumIvoryTower2);
64+
```
65+
66+
Ausgabe in der Konsole:
67+
68+
```
69+
enumIvoryTower1=com.iluwatar.singleton.EnumIvoryTower@1221555852
70+
enumIvoryTower2=com.iluwatar.singleton.EnumIvoryTower@1221555852
71+
```
72+
73+
## Verwendung
74+
75+
Ein Singleton sollte verwendet werden, wenn
76+
* genau eine Instanz der Klasse benötigt wird, die für Nutzer über einen wohldefinierten Zugriffspunkt erreichbar ist.
77+
* es möglich sein soll, diese Klasse durch Vererbung zu erweitern, ohne dass bei Verwendung der erweiterten Instanz Codeänderungen nötig sind.
78+
79+
## Reale Anwendungen in Java
80+
81+
* Logging-Klassen
82+
* Konfigurationsklassen in vielen Anwendungen
83+
* Verbindungspools
84+
* Dateimanager
85+
* [java.lang.Runtime#getRuntime()](http://docs.oracle.com/javase/8/docs/api/java/lang/Runtime.html#getRuntime%28%29)
86+
* [java.awt.Desktop#getDesktop()](http://docs.oracle.com/javase/8/docs/api/java/awt/Desktop.html#getDesktop--)
87+
* [java.lang.System#getSecurityManager()](http://docs.oracle.com/javase/8/docs/api/java/lang/System.html#getSecurityManager--)
88+
89+
## Vor- und Nachteile
90+
Vorteile:
91+
* Kontrollierter Zugriff auf die einzige Instanz.
92+
* Namensraum wird nicht unnötig belastet.
93+
* Operationen und Darstellungen können durch Vererbung verfeinert werden.
94+
* Bei Bedarf auch mehrere Instanzen möglich.
95+
* Flexibler als Klassenoperationen
96+
97+
Nachteile:
98+
* Schwierig zu testen wegen globalem Status.
99+
* Möglicherweise komplexeres Lebenszyklusmanagement.
100+
* Bei Parallelität sind ohne sorgfältige Synchronisierung Engpässe möglich.
101+
102+
## Verwandte Patterns
103+
104+
* [Abstract Factory](https://java-design-patterns.com/patterns/abstract-factory/): Oft verwendet, um sicherzustellen, dass nur eine Instanz existiert.
105+
* [Factory Methoden](https://java-design-patterns.com/patterns/factory-method/): Das Singleton-Pattern kann implementiert werden, indem über eine Factory-Methode die Instanzerzeugung gekapselt wird.
106+
* [Prototyp](https://java-design-patterns.com/patterns/prototype/): Hier müssen keine Instanzen erzeugt werden. Das Pattern kann zusammen mit dem Singleton verwendet werden, um einzige Instanzen zu verwalten.
107+
108+
## Quellen
109+
110+
* [Design Patterns: Elements of Reusable Object-Oriented Software](https://amzn.to/3w0pvKI)
111+
* [Effective Java](https://amzn.to/4cGk2Jz)
112+
* [Head First Design Patterns: Building Extensible and Maintainable Object-Oriented Software](https://amzn.to/49NGldq)
113+
* [Java Design Patterns: A Hands-On Experience with Real-World Examples](https://amzn.to/3yhh525)
114+
* [Refactoring to Patterns](https://amzn.to/3VOO4F5)

0 commit comments

Comments
 (0)