Erzeugungsmuster
Erzeugungsmuster (englisch creational patterns) sind eine Teilmenge der Entwurfsmuster aus dem Bereich der Softwareentwicklung, die der Erzeugung von Objekten dienen. Sie entkoppeln die Konstruktion eines Objekts von seiner Repräsentation. Die Objekterzeugung wird gekapselt und ausgelagert (z. B. in eine Fabrik), um den Kontext der Objekterzeugung unabhängig von der konkreten Implementierung zu halten, gemäß der Regel: „Programmiere auf die Schnittstelle, nicht auf die Implementierung!“
Entwurfsmuster beinhalten zwei Ideen: Die erste besteht darin, das Wissen über die konkreten Klassen zu verbergen, die zweite darin, zu verbergen, wie Instanzen dieser Klassen erzeugt und verbunden werden.[1]
Erzeugungsmuster werden in Objekt-Erzeugungsmuster und Klassen-Erzeugungsmuster aufgeteilt. Erstere behandeln Entwurfsmuster, die mit der Objekterzeugung zu tun haben und Teile der Objekterzeugung anderen Objekten überlassen. Letztere haben mit der Klasseninstanziierung zu tun und überlassen die Klasseninstanziierung Unterklassen.[2]
Beispiel für ein Erzeugungsmuster
Wenn statt
konto = new GiroKonto();
eine Fabrikmethode eingesetzt wird,
KontoFactory kontoFactory = new KontoFactory(); typGiro = kontoFactory.GIRO; konto = kontoFactory.getInstance(typGiro);
erhält man die Flexibilität, die Klasse des zu erzeugenden Objekts (hier GiroKonto) zur Laufzeit zu bestimmen, anstatt sich bereits zu Übersetzungszeit auf die konkrete Klasse festlegen zu müssen.
Die Gründe für die Entkopplung von Konstruktion und Repräsentation eines Objekts sind je nach Erzeugungsmuster verschieden:
Kurzbeschreibung und Abgrenzung verschiedener Erzeugungsmuster
- Abstrakte Fabrik (abstract factory)
- Die abstrakte Fabrik definiert eine Schnittstelle zur Erzeugung einer Familie von Objekten, wobei die konkreten Klassen der zu erzeugenden Objekte erst zur Laufzeit festgelegt werden.
- Einzelstück (singleton)
- Von einer Klasse soll nur ein einziges Mal ein Objekt erzeugt werden, z. B. weil eine zentrale Struktur erzwungen werden soll oder eine korrespondierende Hardware-Komponente physikalisch nur einmal existiert.
- Erbauer (builder)
- Das Entwurfsmuster Erbauer trennt den Aufbau komplexer Objekte von ihrer konkreten Darstellung. Dadurch soll ermöglicht werden, dass derselbe Konstruktionsprozess verschiedene Darstellungen erzeugen kann.
- Fabrikmethode (factory method)
- Mehrere verwandte Typen von Objekten (Klassen) implementieren die gleiche Schnittstelle, unterscheiden sich jedoch in Namen und Verwendungszweck. Nun soll in einem Programmkontext ein konkretes Objekt eines bestimmten Typs verwendet werden.
- Multiton
- Variante des Singleton-Musters, das die Anzahl erzeugter Objekte kontrolliert, z. B. um die Anzahl gleichzeitig geöffneter Datenbankverbindungen auf einen für eine gute Gesamtleistung erforderlichen Wert zu reduzieren.
- Prototyp (prototype)
- Das Entwurfsmuster Prototyp verwendet ein Objekt als Vorlage (Prototyp), um daraus weitere Objekte zu erzeugen, die anschließend modifiziert werden können.
(Quelle:[3])
Referenzen
- Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: Design Patterns. Addison-Wesley, Massachusetts 1995, ISBN 0-201-63361-2, S. 81.
- Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: Design Patterns. Addison-Wesley, Massachusetts 1995, ISBN 0-201-63361-2.
- Erich Gamma, Richard Helm, Ralph E. Johnson, John Vlissides: Creational Patterns. In: GofPatterns. 30. November 2020, abgerufen am 30. November 2020 (englisch).