5.1.3 Entwurfsmuster (Design Patterns)
5.1.3 Entwurfsmuster (Design Patterns)
Nach Wikipedia:
|
Referenzen
Im zweiten Semester werden die Entwurfsmuster
benutzt.
In der Vorlesung des ersten Semesters werden einige wenige, ausgewählte Entwurfsmuster vorgestellt:
- 5920 views
Factory (Fabrikmethode)
Factory (Fabrikmethode)Es gibt Situation, in denen möchte man die Erzeugung neuer Objekte nicht im Konstruktor einer Klasse durchführen weil man z.Bsp.
- Zusätzliche Verwaltungsaufgaben durchführen möchte (z.Bsp. Registrierung des Objekts)
- Nicht mehr benötigte Objekte wieder verwenden möchte ( z.Bsp. Datenbankverbindungen)
- Die Wahl haben möchte Unterschiedliche Spezialisierungen einer Klasse oder die Implementierung einer Schnittstelle nutzen möchte.
Dieser Anwendungsfall wird mit dem Entwurfsmuster "Factory" (Fabrikmethode) beschrieben.
VerwendungEine Fabrikmethode
Eine Fabrikmethode (Factory) besteht typischer Weise aus
KategorieEine Fabrikmethode (Factory) gehört zur Kategorie der Erzeugungsmuster (Creational Pattern). |
UML Diagramm
|
Naive Javaimplementierung
/** * Einfache Implementierung der Fabrikmethode (Factory) */ public class Factory { /** * privater Konstruktor der nur innerhalb der Klasse * aufgerufen werden kann */ private Factory() { // Individuelle Initialisierung erfolgt hier } /** * Erzeugen der Objekte. */ public static Factory getInstance() { // Vorarbeiten instanz = new Factory(); // Nacharbeiten return instanz; }}
- 2062 views
Singleton (Einzelstück)
Singleton (Einzelstück)Es gibt Anwendungsfälle in denen es gewünscht ist genau ein Objekt global zur Verfügung zu stellen. Dieser Anwendungsfall wird mit dem Entwurfsmuster "Singleton" (Einzelstück) beschrieben. Beispiele für solche Anwendungsfälle sind:
- Implementierung eines seriellen logging Mechanismus
- Implementierung eines Puffers für einen Drucker
VerwendungEin Einzelstück
Ein Singleton (Einzelstück) implementiert eine ähnliche Struktur wie eine globale Variable. KategorieDas Einzelstück (Singleton) gehört zur Kategorie der Erzeugungsmuster (Creational Pattern). |
UML Diagramm
|
Naive Javaimplementierung (Lazy initialization)
/** * Einfache Implementierung des Einzelstueck (Singleton */ public class Einzelstueck { private static final Einzelstueck instanz; /** * privater Konstruktor der nur innerhalb der Klasse * aufgerufen werden kann */ private Einzelstueck() { // Individuelle Initialisierung erfolgt hier } /** * Erzeugen des einzigen Objekts falls noch keines existiert. * Rückgabe des Objekts falls es schon existiert * Diese Methode ist statisch. Sie kann auch ohne die Existenz einer Instanz aufgerufen werden. * Die Methode ist die einzige öffentliche Methode */ public static Einzelstueck getInstance() { if (instanz == null) { instanz = new Einzelstueck(); } return instanz; }}
Das gezeigte Beispiel verwendet eine "Lazy initialization". Das Objekt wird erst erzeugt wenn es auch wirklich benötigt wird. Hierdurch kann das unnötige Allokieren von Ressourcen vermieden werden.
Der Nachteil dieser Implementierung besteht darin, dass sie nicht threadsicher ist. In einem Javaprogramm mit mehreren Threads (Ausführungseinheiten) können zwei Threads gleichzeitig ein Objekt erzeugen und damit das gewünschte Ziel des Einzelstücks durchkreuzen.
Threadsichere Javaimplementierung
/** * Threadsichere Implementierung des Entwurfsmuster Einzelstueck (Singleton) */ public class Einzelstueck { private static Einzelstueck instanz = new Einzelstueck(); /** * privater Konstruktor der nur innerhalb der Klasse * aufgerufen werden kann */ private Einzelstueck() { // Individuelle Initialisierung erfolgt hier } /** * Diese Methode ist statisch. Sie kann auch ohne die Existenz einer Instanz aufgerufen werden. * Die Methode ist die einzige öffentliche Methode */ public static Einzelstueck getInstance() { return instanz; } }
Die hier gezeigte Implementierung ist threadsicher da die Instanz schon beim Laden der Klasse erzeugt wird.
- 7293 views