Creational Patterns Seminar Software-Entwurf WS 2004/05 Thomas Liro <thomas@liro.info>
Inhaltsüberblick Einordnung des Themas Beschreibung von Design Pattern Auswahl von Design Patterns Was sind Creational Patterns? Creational Patterns Singleton Factory Method Builder Abstrakt Factory Beziehungen zwischen Creational Patterns Zusammenfassung 2
Einordnung des Themas 3
Einordnung des Themas Design Patterns Creational Patterns Structural Patterns z.b. Model-View-Controller Behavior Patterns z.b. Observer Pattern Other Patterns 4
Beschreibung von Design Patterns Pattern-Schablone Pattern-Name Vermittelt knapp und präzise Zweck Wozu dient das Pattern? Entwurf Welcher Struktur folgt das Muster? (UML) Implementierung Wie wird das Pattern implementiert? (Java-Code) Vorteile Welche Vorteile entstehen durch die Anwendung? Nachteile Und welche Nachteile? Anwendungsszenario Beispiel für die Anwendung des Patterns 5
Auswahl von Design Patterns Welches Pattern ist das Richtige? Antwort: Problem auf Pattern eingrenzen Folgende Fragen helfen dabei: Welchen Zweck verfolgt das Pattern? In welcher Beziehung miteinander stehen in Frage kommende Muster? Welche Aufgabe soll das Pattern erfüllen? (Creational, Behavioral oder Structural Pattern?) Was soll im Entwurf variabel sein? 6
Was sind Creational Patterns? Creational Patterns = deutsch Erzeugungsmuster Vorgehensmodelle zur Erzeugung von Objekten in OO Flexiblere Objekterzeugung als mit new-operator Dazu gehören Singleton Factory Method Builder Abstract Factory Allen gemeinsam Verstecken Erzeugungsprozess (Kapselung, Information Hiding) Bieten Schnittstelle zur Objekterzeugung (Abstrakte Klasse) 7
Singleton Zweck Garantiert, dass nur genau eine Instanz einer Klasse existiert Entwurf Klasse selbst für Verwaltung ihres einzigen Exemplars zuständig Private Klassenvariable speichert einzige Instanz Privater Konstruktor verhindert Objekterzeugung Öffentliche Klassenmethode getinstance Liefert einzige Instanz Ermöglicht globalen Zugriff Singleton - static einzigeinstanz - Singleton() + static getinstance():singleton 8
Singleton (Forts.) Implementierung public class Singleton { 1 private static Singleton einzigeinstanz = null; 2 private Singleton() {}; {}; } 1 2 3 4 3 public static Singleton getinstance(){ if if (einzigeinstanz = null) 4 einzigeinstanz = new new Singleton(); return einzigeinstanz; } Private Klassenvariable Privater Konstruktor Öffentliche Zugriffsmethode Konstruktor wird nur einmal aufgerufen 9
Singleton (Forts.) Vorteile Einfache Implementierung Entlastet anfällige Systemteile Ableitung und Spezialisierung der Klasse möglich Alternative: Anzahl an Instanzen variabel Nachteile Performance-Senkung bei Mehrbenutzer-Systemen möglich (Flaschenhals) Zerstörung problematisch, falls Clients Referenzen halten Anwendungsszenario Verteilte Anwendungen mit Datenbankzugriff Ein Objekt belastet Datenbank weniger als viele Objekte Kein ständiger Verbindungsauf- und Abbau Einziges Objekt wird sequentiell weiter gereicht 10
Factory Method Zweck Definiert eine Schnittstelle für die Objekterzeugung Konkrete Unterklassen für Objekterzeugung zuständig Entwurf Konstruktion Repräsentation 11
Factory Method (Forts.) Vorteile Durch Kapselung ist der Konstruktionsprozess (ConkreteFactory, ConcreteProduct) austauschbar Konkrete Produkte unterschiedlichen Typs erzeugbar Produktrückgabe auch im Fehlerfall möglich Nachteile ConcreteFactory an ConcreteProduct-Typ gebunden Product-Änderung erfordert Factory-Anpassung 12
Factory Method (Forts.) Anwendungsszenario Framework für Anwendungen, die dem Benutzer mehrere Dokumente auf einmal präsentieren können Abstraktionen: Abstrakte Klassen Anwendung und Dokument Anwendung kennt Dokument-Typ nicht erzeugedokument Methode kann durch Parameter konkreten Dokumenttyp bestimmen. Idee aus GoF - Entwurfsmuster 13
Builder Zweck Erzeugung von komplexen Objekten Erzeugung unterschiedlicher Repräsentationen durch den selben Konstruktionsprozess Entwurf Abstrakte Klasse Builder Klasse ConcreteBuilder mit überschriebenen Methoden Direktor gibt Konstruktionsauftrag Was? Wie? 14
Builder (Forts.) Zeitlicher Ablauf 1. Client instanziiert ConcreteBuilder-Objekt 2 3 1 4 2. Client initialisiert damit neuen Director 3. Client ruft buildproduct() auf 4. buildpartx()-methoden erzeugen Produkt 5. Client holt sich Produkt über getresult() 5 Zeitliche Trennung von Produkt-Erstellungsprozess und Abholen des Produktes 15
Builder (Forts.) Vorteile Erzeugung komplexer Objekte Leichtere Erweiterbarkeit durch Modularisierung (andere Directors, neue Builders) Zeitliche Trennung erlaubt Kontrolle jeden Erstellungsschrittes, Möglichkeit der direkten Fehlerbehandlung Nachteile Enge Kopplung zwischen Produkt und Builder 16
Builder (Forts.) Anwendungsszenario Anwendung, die Dokumente in verschiedene Formate konvertiert Einfach, neue Konvertierung einzufügen Builder 17
Abstract Factory Zweck Erzeugung von Familien verwandter oder abhängiger Objekte ohne konkrete Klassenbenennung Entwurf 1. Definition abstrakter Familienmitglieder (AbstractProductX) und der abstrakten Fabrik (AbstactFactory) 2. Jeder konkreten Familie folgt konkrete Fabrik Dynamische Auswahl konkreter Fabrik Client kennt konkreten Typ nicht 18
Abstract Factory (Forts.) Vorteile Client nur an Schnittstellen gekoppelt, Information Hiding Entwicklung konkreter Klassen außerhalb übriger Applikation Bereitstellung und Austausch von Objektfamilien einfach Testen übriger Applikation z.b. mit Test-Factory möglich Nachteile Erweiterung um weiteres Familienmitglied kompliziert Daher: genaueste Analyse der Familienmitglieder vor Implementierung 19
Abstract Factory (Forts.) Anwendungsszenario Look-And-Feel-Standards 20
Beziehungen zwischen Creational Patterns Builder Factory Method implementiert durch Abstract Factory einziges Exemplar Singleton Quelle: GoF - Entwurfsmuster 21
Zusammenfassung Beschreibung und Auswahl von Design Patterns Creational Patterns Singleton einzige Instanz Factory Method Schnittstelle zur Objekterzeugung Builder komplexe Objekte Abstrakt Factory Objektfamilien Prinzipien Modularisierung Information Hiding Kapselung Program to an Interface, Schnittstelle Default-Implementierung, Abstraktion (Abstrakte Klasse) Dynamisches Binden (Polymorphismus) 22
Ende Danke für die Aufmerksamkeit! 23