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 gegen die Schnittstelle, nicht gegen 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])

Einzelnachweise

  1. Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: Design Patterns. Addison-Wesley, Massachusetts 1995, ISBN 0-201-63361-2, S. 81. 
  2. Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: Design Patterns. Addison-Wesley, Massachusetts 1995, ISBN 0-201-63361-2. 
  3. Erich Gamma, Richard Helm, Ralph E. Johnson, John Vlissides: Creational Patterns. In: GofPatterns. 30. November 2020, abgerufen am 30. November 2020 (englisch). 

Siehe auch

  • Nebenläufigkeit
  • Strukturmuster
  • Verhaltensmuster
VD
Entwurfsmuster
Erzeugungsmuster

Abstrakte Fabrik | Erbauer | Fabrikmethode | Prototyp | Singleton | Multiton | Objektpool

Strukturmuster

Adapter | Brücke | Decorator | Fassade | Fliegengewicht | Kompositum | Stellvertreter

Verhaltensmuster

Beobachter | Besucher | Interpreter | Iterator | Kommando | Memento | Schablonenmethode | Strategie | Vermittler | Zustand | Zuständigkeitskette | Interceptor | Nullobjekt | Protokollstapel

Muster für objektrelationale Abbildung

Datentransferobjekt | Table Data Gateway | Row Data Gateway | Active Record | Unit of Work | Identity Map | Lazy Loading | Identity Field | Dependent Mapping | Embedded Value | Serialized LOB | Inheritance Mapper | Metadata Mapping | Query Object | Command-Query-Responsibility-Segregation

Nachrichtenübermittlungsmuster

Message | Command Message | Document Message | Event Message | Request-Reply | Return Address | Correlation Identifier | Message Sequence | Message Expiration | Format Indicator | Message Channel | Point-to-Point Channel | Publisher-Subscriber Channel | Datatype Channel | Invalid Message Channel | Dead Letter Channel | Guaranteed Delivery | Channel Adapter | Messaging Bridge | Message Bus | Pipes-and-Filters | Message Router | Content-based Router | Message Filter | Dynamic Router | Recipient List | Splitter | Aggregator | Resequencer | Composed Message Processor | Scatter-Gather | Routing Slip | Process Manager | Message Broker | Message Translator | Envelope Wrapper | Content Enricher | Content Filter | Claim Check | Normalizer | Canonical Data Model | Message Endpoint | Messaging Gateway | Messaging Mapper | Transactional Client | Polling Consumer | Event-driven Consumer | Competing Consumers | Message Dispatcher | Selective Consumer | Durable Subscriber | Idempotent Receiver | Service Activator | Control Bus | Detour | Wire Tap | Message History | Message Store | Smart Proxy | Test Message | Channel Purger

Andere

Application Controller | Business Delegate | Data Access Object | Dependency Injection | Extension Interface | Fluent Interface | Inversion of Control (IoC) | Lock | Model View Controller (MVC) | Model View Presenter (MVP) | Model View Update (MVU) | Model View ViewModel (MVVM) | Page Controller | Registry | Remote Facade | Repository | Service Locator | Session State | Table Module | Template View | Threadpool | Transaction Script | Transform View | Two-Step View | Value Object