mirror of
https://github.com/tiennm99/java-design-patterns.git
synced 2026-10-04 14:13:21 +00:00
docs: Improve existing German READMEs and add new ones (#3444)
* docs: reformulate text, add links to further languages and paragraph about the book in central README.md (#2275) * docs: shorten text for link to payhip (#2275) * docs: reformulate german translation for Abstract Document (#2275) * Create folder for Abstract Factory * Create README.md for Abstract Document * Translate README.md for Abstract Document to German * correct typo * docs: add class diagrams for all patterns (#2275) * docs: add missing words in abstract-factory.README.md (#2275) * docs: Create German README.md for Active Object #2275 first text part * docs: finish German translation of README.md for Active Object * docs: translate actor-model into German #2295 * docs: add German translation for Acyclic Visitor #2295 * correct typo * docs: Translate Singleton into German #2295 * docs: Translate Prototype into German #2295 * Delete localization/de/Abstract Factory * insert line break * correct typos in actor-model * realignment of java code block * docs: translate Adapter Pattern into German #2295 * Update README.md change 'lizenz' to 'Lizenz' in badge * Update README.md translate 'benefits' and 'trade-offs' * remove additional bullet point after line break * correct indentation * docs: translate Dependency Injection into German #2295 * docs: translate Bridge into German #2295 * correct typos * docs: Translate Builder into German * delete english text * little changes in formulation * Update README.md change link to image * docs: remove spanish files (#2275) * docs: remove non-translated patterns (#2275) * Create README.md docs: Translate Step Builder into German #2275 * Create README.md docs: Translate Fluent Interface into German #2275 * eager is eifrig, not gierig * Translate Chain of Responsibility into German #2275
This commit is contained in:
1 parent
bdc008fb78
commit
cd4753a660
15 files changed
+2583
-84
No files matched your search
@@ -0,0 +1,114 @@
|
||||
---
|
||||
shortTitle: Singleton
|
||||
category: Creational
|
||||
language: de
|
||||
tag:
|
||||
- Gang of Four
|
||||
- Instantiation
|
||||
- Lazy initialization
|
||||
- Resource management
|
||||
---
|
||||
|
||||
## Alternativbezeichnung
|
||||
|
||||
* Single Instance
|
||||
|
||||
## Zweck
|
||||
|
||||
Sicherstellen, dass es nur eine Instanz einer Klasse gibt, und einen globalen Zugriffspunkt auf diese Instanz bereitstellen.
|
||||
|
||||
## Detaillierte Erklärung
|
||||
|
||||
Analogie aus der Realität
|
||||
|
||||
> Das Singleton-Pattern entspricht der Ausgabe von Pässen durch die Regierung.
|
||||
> Jeder Bürger darf zu jeder Zeit nur einen Pass besitzen. Die Meldebehörde stellt sicher,
|
||||
> dass niemandem ein zweiter Pass ausgestellt wird.
|
||||
> Wenn ein Bürger ins Ausland reist, benötigt er seinen Pass, der als einzigartiger weltweit anerkannter Nachweis
|
||||
> seiner Identität dient.
|
||||
|
||||
In einfachen Worten
|
||||
|
||||
> Es darf nur ein einziges Objekt dieser Klasse erzeugt werden.
|
||||
>
|
||||
Wikipedia sagt
|
||||
|
||||
> In der Softwareentwicklung ist das Singleton ein Entwurfsmuster, das die Instanziierung einer
|
||||
> Klasse auf ein einziges Objekt beschränkt.
|
||||
> Dies ist sinnvoll, wenn genau ein Objekt benötigt wird, das Aktionen über das gesamte System
|
||||
> hinweg koordiniert.
|
||||
|
||||
Ablaufdiagramm
|
||||
|
||||

|
||||
|
||||
## Programmbeispiel
|
||||
|
||||
vgl. Joshua Bloch, Effective Java 2nd Edition, Seite 18
|
||||
|
||||
> Die beste Art der Implementation eines Singletons ist ein Enum mit nur einem Element.
|
||||
|
||||
```java
|
||||
public enum EnumIvoryTower {
|
||||
INSTANCE
|
||||
}
|
||||
```
|
||||
|
||||
So wird es verwendet:
|
||||
|
||||
```java
|
||||
var enumIvoryTower1 = EnumIvoryTower.INSTANCE;
|
||||
var enumIvoryTower2 = EnumIvoryTower.INSTANCE;
|
||||
LOGGER.info("enumIvoryTower1={}", enumIvoryTower1);
|
||||
LOGGER.info("enumIvoryTower2={}", enumIvoryTower2);
|
||||
```
|
||||
|
||||
Ausgabe in der Konsole:
|
||||
|
||||
```
|
||||
enumIvoryTower1=com.iluwatar.singleton.EnumIvoryTower@1221555852
|
||||
enumIvoryTower2=com.iluwatar.singleton.EnumIvoryTower@1221555852
|
||||
```
|
||||
|
||||
## Verwendung
|
||||
|
||||
Ein Singleton sollte verwendet werden, wenn
|
||||
* genau eine Instanz der Klasse benötigt wird, die für Nutzer über einen wohldefinierten Zugriffspunkt erreichbar ist.
|
||||
* es möglich sein soll, diese Klasse durch Vererbung zu erweitern, ohne dass bei Verwendung der erweiterten Instanz Codeänderungen nötig sind.
|
||||
|
||||
## Reale Anwendungen in Java
|
||||
|
||||
* Logging-Klassen
|
||||
* Konfigurationsklassen in vielen Anwendungen
|
||||
* Verbindungspools
|
||||
* Dateimanager
|
||||
* [java.lang.Runtime#getRuntime()](http://docs.oracle.com/javase/8/docs/api/java/lang/Runtime.html#getRuntime%28%29)
|
||||
* [java.awt.Desktop#getDesktop()](http://docs.oracle.com/javase/8/docs/api/java/awt/Desktop.html#getDesktop--)
|
||||
* [java.lang.System#getSecurityManager()](http://docs.oracle.com/javase/8/docs/api/java/lang/System.html#getSecurityManager--)
|
||||
|
||||
## Vor- und Nachteile
|
||||
Vorteile:
|
||||
* Kontrollierter Zugriff auf die einzige Instanz.
|
||||
* Namensraum wird nicht unnötig belastet.
|
||||
* Operationen und Darstellungen können durch Vererbung verfeinert werden.
|
||||
* Bei Bedarf auch mehrere Instanzen möglich.
|
||||
* Flexibler als Klassenoperationen
|
||||
|
||||
Nachteile:
|
||||
* Schwierig zu testen wegen globalem Status.
|
||||
* Möglicherweise komplexeres Lebenszyklusmanagement.
|
||||
* Bei Parallelität sind ohne sorgfältige Synchronisierung Engpässe möglich.
|
||||
|
||||
## Verwandte Patterns
|
||||
|
||||
* [Abstract Factory](https://java-design-patterns.com/patterns/abstract-factory/): Oft verwendet, um sicherzustellen, dass nur eine Instanz existiert.
|
||||
* [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.
|
||||
* [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.
|
||||
|
||||
## Quellen
|
||||
|
||||
* [Design Patterns: Elements of Reusable Object-Oriented Software](https://amzn.to/3w0pvKI)
|
||||
* [Effective Java](https://amzn.to/4cGk2Jz)
|
||||
* [Head First Design Patterns: Building Extensible and Maintainable Object-Oriented Software](https://amzn.to/49NGldq)
|
||||
* [Java Design Patterns: A Hands-On Experience with Real-World Examples](https://amzn.to/3yhh525)
|
||||
* [Refactoring to Patterns](https://amzn.to/3VOO4F5)
|
||||
Reference in new issue
Block a user